목록dynamic programming (2)
공부하는 스누피
https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다. www.acmicpc.net 생각과정 - n이 1일 경우 0, 2일 경우 1, 3일 경우 1번의 연산으로 1을 만들 수 있다. - 일차원 배열을 만들어 인덱스값에 대한 최소 연산 횟수를 저장한다. - 4부터 n까지 순회하면서 최솟값을 구한다. (Bottom-Up 방식) - 먼저 3이나 2로 나누어 떨어지는지 확인한다. 나누어 떨어진다면, n/3 또는 n/2의 값에서 1을 더한 값을 배열에 저장한다. 앞에서 n/3의 최솟값을 구해 놓았으니 1을 더하기만 하면 된다. - 1을 빼는 연산은 2나 3으로 나누어 떨어지지 않을 때 수행하거나, 앞의..
https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 생각과정 - 피보나치를 재귀 함수로 구현했을 때, 리턴값이 0 또는 1이 되는 횟수를 각각 출력해야 한다. - 시간 절약을 위해 Bottom-up DP를 선택. - n 값이 0일 때, 0 개수는 1, 1 개수는 0이다. - n 값이 1일 때, 0 개수는 0, 1 개수는 1로 출력된다. - 피보나치 함수는 n이 실행되면 n-1, n-2 함수를 각각 실행시키기 때문에 n 값이 2일 때 0과 1의 개수는 각각 n-1번째 값과 n-2번째 값을 더한 것과 같다. - 초기값 0, 1은 메모 배열에서 미리..