알고리즘 67

백준 | 2579 - 계단 오르기 (python)

🪜 계단 오르기 2156번 포도주 시식과 비슷한 문제로 연속한 계단을 오르는 것을 고려하여 푸는 문제이다. ✏️ 문제 계단 오르기 게임은 계단 아래 시작점부터 계단 꼭대기에 위치한 도착점까지 가는 게임이다. 과 같이 각각의 계단에는 일정한 점수가 쓰여 있는데 계단을 밟으면 그 계단에 쓰여 있는 점수를 얻게 된다. 예를 들어 와 같이 시작점에서부터 첫 번째, 두 번째, 네 번째, 여섯 번째 계단을 밟아 도착점에 도달하면 총 점수는 10 + 20 + 25 + 20 = 75점이 된다. 계단 오르는 데는 다음과 같은 규칙이 있다. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다. 연속된 세 개의 계단을 모두 밟아서는 안..

알고리즘/백준 2021.10.08

백준 | 2156 - 포도주 시식 (python)

🍷 포도주 시식 동적 프로그래밍 문제로 연속으로 숫자를 더하면 안되는 경우를 생각해야 한다. ✏️ 문제 효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다. 효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해야 할지 고민하고 있다. 1부터 n까지의 번호가 붙어 있는 n개의 포도주 잔이 순서대로 테이블 위에 놓여 있고, 각 포도주 잔에 들어있는 포도주의 양이 주어졌을 ..

알고리즘/백준 2021.10.08

백준 | 10610 - 30 (python)

3️⃣ 30 숫자들을 조합해서 30의 배수를 만들어야 한다. 3의 배수 특징을 알게 된다면 더 쉽게 풀 수 있는 문제였다. (몰라서 중간에 포기했었다..) ✏️ 문제 어느 날, 미르코는 우연히 길거리에서 양수 N을 보았다. 미르코는 30이란 수를 존경하기 때문에, 그는 길거리에서 찾은 수에 포함된 숫자들을 섞어 30의 배수가 되는 가장 큰 수를 만들고 싶어한다. 미르코를 도와 그가 만들고 싶어하는 수를 계산하는 프로그램을 작성하라. 입력 N을 입력받는다. N는 최대 105개의 숫자로 구성되어 있으며, 0으로 시작하지 않는다. 출력 미르코가 만들고 싶어하는 수가 존재한다면 그 수를 출력하라. 그 수가 존재하지 않는다면, -1을 출력하라. 💡 해결방법 시간 초과한 방법 숫자의 배열에 0이 없다면 30의 배수..

알고리즘/백준 2021.10.07

백준 | 10250 - ACM호텔 (Java)

🏨 ACM호텔 각 출력값이 구해지는 규칙을 찾아야하는 문제 ✏️ 문제 ACM 호텔 매니저 지우는 손님이 도착하는 대로 빈 방을 배정하고 있다. 고객 설문조사에 따르면 손님들은 호텔 정문으로부터 걸어서 가장 짧은 거리에 있는 방을 선호한다고 한다. 여러분은 지우를 도와 줄 프로그램을 작성하고자 한다. 즉 설문조사 결과 대로 호텔 정문으로부터 걷는 거리가 가장 짧도록 방을 배정하는 프로그램을 작성하고자 한다. 문제를 단순화하기 위해서 호텔은 직사각형 모양이라고 가정하자. 각 층에 W 개의 방이 있는 H 층 건물이라고 가정하자 (1 ≤ H, W ≤ 99). 그리고 엘리베이터는 가장 왼쪽에 있다고 가정하자(그림 1 참고). 이런 형태의 호텔을 H × W 형태 호텔이라고 부른다. 호텔 정문은 일층 엘리베이터 바로..

알고리즘/백준 2021.10.07

백준 | 2292 - 벌집 (Java)

🐝 벌집 규칙만 잘 찾는다면 해결 가능한 문제 ✏️ 문제 위의 그림과 같이 육각형으로 이루어진 벌집이 있다. 그림에서 보는 바와 같이 중앙의 방 1부터 시작해서 이웃하는 방에 돌아가면서 1씩 증가하는 번호를 주소로 매길 수 있다. 숫자 N이 주어졌을 때, 벌집의 중앙 1에서 N번 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나가는지(시작과 끝을 포함하여)를 계산하는 프로그램을 작성하시오. 예를 들면, 13까지는 3개, 58까지는 5개를 지난다. 입력 첫째 줄에 N(1 ≤ N ≤ 1,000,000,000)이 주어진다. 출력 입력으로 주어진 방까지 최소 개수의 방을 지나서 갈 때 몇 개의 방을 지나는지 출력한다. 💡 해결방법 1. 중앙의 방 1을 둘러싸고 있는 방들 중, 가장 큰 수대로 나열하면 ..

알고리즘/백준 2021.10.07

백준 | 10950 - A+B - 3 (Java)

➕ A+B - 3 10950번을 3가지 방법을 사용해서 풀어봤다. ✏️ 문제 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10) 출력 각 테스트 케이스마다 A+B를 출력한다. 💡 해결방법 처음 자바 시작할 때, 입력받는건 무조건 scanner로 배웠다. (그땐 시간 단축해야한다는 개념X 알고리즘 공부가 아니었으니까) 알고리즘 공부 시작하고, 자바를 쓰기 시작하면서 BufferedReader를 처음 배웠다. 단순히 입력을 1~2개만 받는 문제를 풀다가 엔터까지 고려야해 하는 상황이 발생했다. 5 1 1 2 3 3 4 9 8 ..

알고리즘/백준 2021.10.07

백준 | 1149 - RGB거리 (python)

🚦 RGB거리 다 풀고보니 계속 틀릴만한 문제는 아닌 것 같은데 계속 틀렸던 문제다. 동적 프로그래밍 문제로 점화식만 잘 구한다면 해결이 되었을 문제.. ✏️ 문제 RGB거리에는 집이 N개 있다. 거리는 선분으로 나타낼 수 있고, 1번 집부터 N번 집이 순서대로 있다. 집은 빨강, 초록, 파랑 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자. 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. 입력 첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이..

알고리즘/백준 2021.10.07