반응형
문제출처
https://www.acmicpc.net/problem/1463
풀이과정
1 2 3 4 5 6 7 8 9 10 11 12 13 | /** * DP문제이다. N이 10^6까지 범위가 주어지기 때문에 전체탐색을 힘들것이라 판단되었다. * DP문제에서 가장중요한 점화식은 조금만 생각하면 유추해 낼 수 있다. * 연산의 최소값을 출력하기 때문에 일반적으로 n번 연산한 횟수는 n-1번 연산의 최솟값 +1임을 의미한다. * 이를 점화식으로 나타내면 * case 1) * dp[n] = min(dp[n/3] + 1, dp[n-1] + 1) * case 2) * dp[n] = min(dp[n/2] + 1, dp[n-1] + 1) * case 3) * dp[n] = dp[n-1] + 1 * */ | cs |
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import java.io.BufferedReader; import java.io.InputStreamReader; public class Main { public static final int MAX = 1000001; public static void main(String[] args) throws Exception { int n; int[] dp = new int[MAX]; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); n=Integer.parseInt(br.readLine()); // 1일때는 연산횟수가 없다. dp[1]=0; for(int i=2; i<=n; i++) { if(i%3==0) dp[i]=Math.min(dp[i/3]+1, dp[i-1]+1); else if(i%2==0) dp[i]=Math.min(dp[i/2]+1, dp[i-1]+1); else dp[i]=dp[i-1]+1; } System.out.println(dp[n]); } } | cs |
반응형
'Algorithm' 카테고리의 다른 글
[BOJ 14502] 연구소 (0) | 2019.01.16 |
---|---|
[SWEA 1245] 균형점 (0) | 2019.01.15 |
[BOJ 14501] 퇴사 (0) | 2019.01.14 |
[BOJ 1182] 부분집합의 합 (0) | 2019.01.14 |
[BOJ 1543] 문서 검색 (0) | 2019.01.08 |