백준_1로만들기_동적계획법(java)
2019. 3. 3. 23:45ㆍ알고리즘문제/백준
1로 만들기
1. 문제
https://www.acmicpc.net/problem/1463
정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지이다.
- X가 3으로 나누어 떨어지면, 3으로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- 1을 뺀다.
정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
solution )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] res = new int[n+1]; res[0] = res[1] = 0; for(int i = 2; i <= n; i++){ res[i] = res[i-1]+1; if(i % 3 == 0) res[i] = Math.min(res[i], res[i/3]+1); else if(i % 2 == 0) res[i] = Math.min(res[i], res[i/2]+1); } System.out.println(res[n]); sc.close(); } } | cs |
TestCase )
2 입력 -> 1
10 입력 -> 3
Problem )
1. 처음에 일단 백준에서 제출해야하는 코드의 형식을 몰라 헤맸다.
2. 문제를 단순하게 생각해 최솟값을 찾는 것이 아니라 그저 횟수를 찾았다.
10 -> 9 -> 3 -> 1 (3회 : 정답)
10 -> 5 -> 4 -> 2 -> 1 (4회 : 나의 오답)
3. 그래서 다른 사람의 답안을 봤을때도 바로 이해가 되지 않았다가
문의사항에서 나와 같은 질문을 한 사람에게 달린 답변을 보고 깨달았다.
최소값을 묻는 문제라는 것을 !!!!!!!!!!!!!! 아직 좀 어렵지만 좀 더 해 볼 만해 보인다.
* 백준 풀이 방법
1 2 3 4 5 6 7 8 9 | public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.println(); sc.close(); } } | cs |
'알고리즘문제 > 백준' 카테고리의 다른 글
백준_인싸들의 가위바위보[Java] (0) | 2019.04.03 |
---|---|
백준_Count Circle Groups_그래프_10216(Java) (0) | 2019.03.22 |
백준_피보나치 3_2749(java) (0) | 2019.03.09 |
백준_피보나치함수_(1003)_동적계획법(java) (0) | 2019.03.09 |
백준_1,2,3 더하기_동적계획법(java) (0) | 2019.03.05 |