본문 바로가기

DP15

[백준] 11727번: 2xn 타일링 2 (Java) 1. 문제설명2xn 직사각형을 1x2, 2x1, 2x2 타일로 채우는 방법의 수를 10,007로 나눈 나머지를 구하는 문제이다.시간 제한: 1초메모리 제한: 256MB 2. 접근 방식`dp[i]`에 가로 길이가 i일 때 채우는 방법의 수를 저장한다.`dp[i] = dp[i-1] + dp[i-2] * 2``dp[1]`과 `dp[2]`는 초기값 설정하고, i=3 부터는 점화식을 사용해 값을 구한다. 3. 틀린 이유`dp[i]` 에 값을 저장할 때 점화식 계산한 값을 그대로 넣었더니 데이터 타입을 초과해서 틀렸다.  4. 틀린 부분 수정저장할 때 `% 10007` 연산으로 10007 이하로 값을 저장했다.  5. 최종 코드import java.io.*;public class Main { public st.. 2024. 8. 27.
[백준] 9655번: 돌 게임 (Java) 1. 문제설명돌 게임은 탁자 위에 돌 N개가 있을 때 상근이와 창영이가 턴을 번갈아가면서 돌을 1개 또는 3개 가져가고, 마지막 돌을 가져가는 사람이 이기는 게임이다. 게임은 상근이가 먼저 시작하고, 이기는 사람을 구하는 문제이다.시간 제한: 1초메모리 제한: 128MB 2. 접근 방식REF) https://propercoding.tistory.com/21문제에서 “두 사람이 완벽하게 게임을 했을 때”가 조건이기 때문에 최적의 전략을 사용해야 한다.N=1: 상근이가 돌 1개를 가져가므로 상근이의 승리N=2: 상근이가 1개를 가져가면 창영이가 남은 1개를 가져가므로 창영이의 승리N=3: 상근이가 3개를 가져가므로 상근이의 승리N=4: 상근이가 1개 또는 3개를 가져가면 창영이가 3개 또는 1개를 가져가므로.. 2024. 8. 27.
[백준] 9095번: 1,2,3 더하기 (Java) 1. 문제설명정수 n이 주어졌을 때, n을 1, 2, 3의 조합으로 나타내는 방법의 수를 구하는 문제이다.시간 제한: 1초메모리 제한: 512MB 2. 접근 방식DP 방법을 사용한다.dp[i] 는 i를 1, 2, 3의 합으로 나타낼 수 있는 경우의 수를 저장한다.dp[i] 는 dp[i-1], dp[i-2],dp[i-3] 의 합으로 계산한다. 3. 올바른 접근 방식 및 해결 방식https://lotuslee.tistory.com/43 4. 최종 코드import java.io.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(.. 2024. 8. 26.
[백준] 1010번: 다리 놓기 (Java) 1. 문제설명도시에는 도시를 동쪽과 서쪽으로 나누는 큰 일직선 모양의 강의 흐르고 있다. 다리를 짓기로 하고, 짓기에 적합한 곳(사이트)이 서쪽에 N개, 동쪽에는 M개가 있다.(N≤M) 한 사이트에는 최대 한 개의 다리만 연결될 수 있고, 다리를 최대한 많이 짓기 위해 서쪽의 사이트 개수만큼(N개) 다리를 지으려고 한다.다리끼리는 서로 겹쳐질 수 없다고 할 때 다리를 지을 수 있는 경우의 수를 구하는 문제이다.시간 제한: 0.5초메모리 제한: 128MB 2. 접근 방식조합의 개념을 사용한다.$_nC_r$ : 서로 다른 n개의 원소에서 r(단, $0$_nC_r = {_{n-1}C_{r-1}} + {_{n- 1}C_{r}}$`int dp[][]` 배열을 사용하여 조합의 값을 저장한다.DP의 Top-Down .. 2024. 8. 26.
[백준] 2748번: 피보나치 수 2 (Java) 1. 문제설명0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 2번째 부터는 다음 점화식을 만족한다.F(n) = F(n-1) + F(n-2)   (n ≥ 2) n이 주어졌을 때, n번째 피보나치 수를 구하는 문제이다. 시간 제한: 1초메모리 제한: 128MB 2. 접근 방식DP - Bottom-Up 방식0, 1번째 피보나치 수를 먼저 계산하고 배열에 저장한다.반복문을 통해 2~n번째 피보나치 수를 순차적으로 계산하고 저장한다.배열의 n번째 값을 반환한다.DP - Top-Down 방식재귀 호출을 통해 n-1, n-2번째 피보나치 수를 계산하고, 두 값을 더해 배열[n]에 저장한다.배열의 n번째 값을 반환한다. 3. 틀린 이유피보나치 수를 저장하는 배열의 타입을 int로 선언했다.예를 들어 n이 .. 2024. 8. 26.
[백준] 1890번: 점프 (Java) 💡문제 분석 요약각 칸에 현재 갈 수 있는 거리가 적혀있는 NxN 게임판이 주어지고, 반드시 오른쪽이나 아래쪽으로 이동할 수 있다. 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 이동할 수 있는 경로의 개수를 구하는 문제이다.시간 제한: 1초메모리 제한: 128MB 💡알고리즘 설계이동 경로를 저장할 `dp`배열을 생성한다.시작 위치인 `dp[0][0]`을 1로 설정하고, 이중 for문으로 게임판 배열을 탐색한다.탐색 위치가 게임판의 가장 오른쪽 아래 칸이면 반복문을 종료한다.게임판에 적혀있는 숫자만큼 오른쪽 또는 아래쪽으로 이동할 수 있으면 `dp`배열에 경로를 저장한다. 💡코드import java.io.*;import java.util.*;public class Main { pu.. 2024. 8. 3.
[백준] 1495번: 기타리스트 (Java) 💡문제 분석 요약N개의 각 곡을 연주하기 전에 볼륨을 V[i] 만큼 올리거나 내릴 수 있고, 볼륨은 0에서 M 사이여야 한다.시작 볼륨 S에서 시작해서, 마지막 곡을 연주할 수 있는 최대 볼륨을 구하는 문제이다.시간 제한: 2초메모리 제한: 128MB 💡알고리즘 설계M+1 크기의 dp 배열을 생성한다. → dp[볼륨] = 연주 순서볼륨 리스트가 {5, 3, 7}일 때:0번째 연주에서 가능한 볼륨은 S = 5 → dp[5] = 01번째 연주에서 가능한 볼륨은 0, 10 → dp[0] = 1, dp[10] = 12번째 연주에서 가능한 볼륨은 7, 3 → dp[7] = 2, dp[3] = 23번째 연주에서 가능한 볼륨은 10, 0 → dp[10] = 3, dp[0] = 3N번째 곡의 볼륨 중 최댓값 → 값.. 2024. 8. 2.
반응형