[백준] 1463 1로 만들기
2022. 6. 28. 17:21ㆍ알고리즘/백준
728x90
맨 처음에는 0.1초가 나오도록 값을 입력받으면 바로 해결하는 프로그램을 짜려고 했는데, 이것은 조금 힘들 거 같아서 dp로 생각을 돌렸다.
맨 처음에는 1을 뺀 배열의 값을 참조해서 1을 더해주고
두번짼는 2로 나눠지면 2로 나눠진 배열에 1을 더해주고
마지막에는 3으로 나눠지면 3으로 나눠진 배열에 1을 더해준다.
고려하는 순서가
-1 , /2, /3인 이유는 큰 수를 나눌수록 가장 작은 횟수를 찾을 수 있기 때문이다.
#include <iostream>
using namespace std;
int arr[1000001];
int main() {
int n;
cin >> n;
for (int i = 2; i <= n; i++) {
arr[i] = arr[i - 1] + 1;
if (i % 2 == 0) {
if (arr[i] >= arr[i / 2] + 1) {
arr[i] = arr[i / 2] + 1;
}
}
if (i % 3 == 0) {
if (arr[i] >= arr[i / 3] + 1) {
arr[i] = arr[i / 3] + 1;
}
}
}
cout << arr[n];
return 0;
}
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 14277 등차 수열과 등비 수열 c++ (+14277 반례) (0) | 2022.07.01 |
---|---|
[백준] 10815 숫자 카드 ( C++) (0) | 2022.06.30 |
[백준 1269번] : 대칭 차집합 (0) | 2022.06.22 |
백준 1107 리모컨 C++ (0) | 2022.06.09 |
백준 17478 재귀함수가 뭔가요? (0) | 2022.05.31 |