반응형
문제
정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.
- X가 3으로 나누어 떨어지면, 3으로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- 1을 뺀다.
정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define size 1000001
int N;
int arr[size];
void solution()
{
arr[0] = arr[1] = 0;
int tmp;
for (int i = 2; i <= N; i++)
{
arr[i] = arr[i-1] + 1;
if (i % 3 == 0)
{
tmp = arr[i / 3] + 1;
arr[i] = arr[i] < tmp ? arr[i] : tmp;
}
if (i % 2 == 0)
{
tmp = arr[i / 2] + 1;
arr[i] = arr[i] < tmp ? arr[i] : tmp;
}
}
printf("%d", arr[N]);
}
int main()
{
scanf("%d", &N);
solution();
}
반응형
'Algorithm > BAEKJOON' 카테고리의 다른 글
[ C / C++ ] 백준 1546 평균 (0) | 2022.02.22 |
---|---|
[ C / C++ ] 백준 1543 문서 검색 (0) | 2022.02.21 |
[ C / C++ ] 백준 1330 두 수 비교하기 (0) | 2022.02.19 |
[ C / C++ ] 백준 1309 동물원 (0) | 2022.02.18 |
[ C / C++ ] 백준 1268 임시 반장 정하기 (0) | 2022.02.17 |