다이나믹 프로그래밍
[Python/파이썬 11057 백준] 오르막 수 (다이나믹 프로그래밍)
www.acmicpc.net/problem/11057 11057번: 오르막 수 오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수 www.acmicpc.net 풀이 10844 쉬운 계단수 문제랑 굉장히 유사한 문제입니다.. 유사한 문제 풀어보면 쉽게 풀리네용... 주의할 점은 첫번째 0인 숫자가 들어갈 수 있다는거구, 오름차순 숫자 갯수를 찾아야합니다. 또한 이차원 리스트 사용 숫자를 일일히 구하다보면 공통점이 있는데 마지막 수가 0일 경우 다음 숫자는 1~9가 가능하고 1일 경우 2~9 2일 경우 3~9 . . . 9는 다음 숫자..
[Python/파이썬 15990 백준] 1, 2, 3 더하기 5
www.acmicpc.net/problem/15990 15990번: 1, 2, 3 더하기 5 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 1차원으로 계속 규칙을 찾으려니 30분정도 봤는데 못찾았다.. 어렵네용... 답을 참고해서 이해한 내용을 적자면 dp [1], dp[2], dp[3]에 각각 1,2,3으로 끝나는 상황을 넣는다. ex) dp[3] 은 2 1 1 2 3 이 예시와 같이 끝나는 숫자가 1일때 2일때 3일때 각각 1개씩이다 그 후 n이 만약 6인 상황에서 dp[5]에서 2로 끝난거 +1을 해주거나, 3으로 끝난거에 +1을 해주면 -> dp[6][0] dp[4]에서 1로 끝난거에 ..
[알고리즘] 다이나믹 프로그래밍 (DP) 이해하기
다이나믹 프로그래밍(동적계획법)이란? - 큰 문제를 풀기 위해서 작은 문제를 풀어 나가는 방식이며, 작은 문제에서 반복이 없다는 것이 특징입니다. -> 분할 정복 기법과 다른 결정적인 차이 또한 하나의 문제를 단 한 번만 푸는 알고리즘 다이나믹 프로그래밍 조건 1. 큰 문제를 작은 문제로 나눌 수 있다. 2. 작은문제에서 구한 정답은 이것을 포함한 큰 문제에서도 동일한 정답이다. 이러한 조건때문에 시간 복잡도를 훨씬 줄일 수 있습니다!!! 어떻게 구현할까요?? 메모이제이션(Memoization) 기법 활용 말 그대로 메모하는 기법입니다. 작은 문제 계산된 결과값을 배열을 사용해서 저장하고, 나중에 큰 문제에서 동일한 계산을 요구할 때 배열의 저장된 값을 불러오는 것입니다. -> dp 리스트 초기화해서 안..
[Python/파이썬 9465 백준] 스티커 (다이나믹 프로그래밍)
www.acmicpc.net/problem/9465 9465번: 스티커 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의 www.acmicpc.net 문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀 스티커의 왼쪽, 오른쪽, 위, 아래에 있는 스티커는 사용할 수 없게 된다...