본문 바로가기

알고리즘/Dynamic Programming15

[DP] 백준 15989번 : 1,2,3 더하기 4 - 파이썬 Python https://www.acmicpc.net/problem/15989 15989번: 1, 2, 3 더하기 4 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 4가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 합을 이루고 있는 수의 순서만 다른 것은 같은 것으로 친다. 1+1+1+1 2+1+1 (1+1+2, 1+2+1) 2+2 www.acmicpc.net n을 1,2,3의 합으로 나타내는 개수는 이전 수를 1,2,3의 합으로 나타냈을 때의 수에 영향을 받는다 dp방법으로 풀어내기로 한다 중복되는 1 2 1 / 1 1 2 같은 조합을 없애기 카운팅 안하기 위해서는 각각의 조합에서 대표만 카운팅해야 함 1 1 2 같은 경우만 카운팅 하기 위해서는 1을 사용하는 방법과 2를 사용하는 방법을 .. 2022. 1. 16.
[DP] 백준 11060번 : 점프 점프 - Python 파이썬 https://www.acmicpc.net/problem/11060 11060번: 점프 점프 재환이가 1×N 크기의 미로에 갇혀있다. 미로는 1×1 크기의 칸으로 이루어져 있고, 각 칸에는 정수가 하나 쓰여 있다. i번째 칸에 쓰여 있는 수를 Ai라고 했을 때, 재환이는 Ai이하만큼 오른쪽으로 www.acmicpc.net 생각하기 어디로 가는가? 무조건 오른쪽으로 점프하므로 문제의 크기가 점점 작아진다 마지막 칸에 오는 방법은 모두 이전들 칸에서의 방법중 하나이다 dp[i] : 각 칸 도착시의 최소 점프 횟수 이렇게 설정해놓으면 마지막 칸까지 각칸을 경유해서 점프해 나갈때, 모두 최소인 칸만 경유하는 것이므로 마지막 칸도 최소가 된다 구현하기 0번째 칸부터 시작해서 N-1번째 칸까지 N-1을 넘지 않는 .. 2022. 1. 12.
DP 풀이방법 5가지 정리 - 백준 11048번 : 이동하기 Python 파이썬 https://www.acmicpc.net/problem/11048 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 방법1 : Top-Down 문제가 점점 작아지는 방식으로 접근 목적지까지 어떻게 왔는지에 대해서 생각하며 접근 결론에 도달하기까지의 과정에 대해 생각하며 접근 dp[i][j] : (1,1)에서 시작하여 (N,M)까지 가는 중에 (i, j) 까지 갔을 때의 가진 최대 사탕의 수 왼쪽에서 온 경우 : (i, j-1)에서 온 경우 왼쪽 위에서 온 경우 : (i-1, j-1)에서 온 경우 .. 2022. 1. 11.
백준 11048 : 이동하기 - 파이썬 Python https://www.acmicpc.net/problem/11048 11048번: 이동하기 준규는 N×M 크기의 미로에 갇혀있다. 미로는 1×1크기의 방으로 나누어져 있고, 각 방에는 사탕이 놓여져 있다. 미로의 가장 왼쪽 윗 방은 (1, 1)이고, 가장 오른쪽 아랫 방은 (N, M)이다. 준규는 www.acmicpc.net 생각하기 가져올 수 있는 사탕의 최대를 구하는 것이기 때문에 생각을 했다 DFS로 모든 경우를 다 해봐? 규칙 같은 것을 찾아서 DP로 만들어볼까? DFS로 풀면 시간초과가 발생할 것 같다는 생각이 들었다. 1000 * 1000 인데 각 경우가 3가지 경우만 고려하더라도 각 칸은 세가지의 경우로 뻗어나갈 가지수를 가지고 있으므로 최대 가로 세로 1000칸이라면 3000000의 가지수.. 2022. 1. 6.