1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
문제:
- X가 3으로 나누어 떨어지면, 3으로 나눈다.
- X가 2로 나누어 떨어지면, 2로 나눈다.
- 1을 뺀다.
이 3가지 연산을 이용해서 입력 값을 1로 만들고, 연산을 사용하는 횟수의 최소 값을 출력합니다.
최소 값은 모르겠고, 그냥 if로 분기해서 풀면 될 것 같다는 생각이 들었습니다.
이렇게 코드를 작성하니 답이 안 나왔습니다. 그래서 찾아보니 다른 분들은 동적 프로그래밍 방법을 사용하고 배열을 이용해 값을 기록 해나갔습니다.
정말 어이가 없었죠 왜 동적 프로그래밍을 사용하는지도 모르겠고, 입력 값이 1개인데 배열을 왜 쓰는지를 모르겠습니다.
코드:
#include <iostream>
using namespace std;
int main(){
int x;
cin >> x;
int count = 0;
while(x!=1){
if(x % 2 ==0){
x /= 2;
++count;
}
if(x % 3 == 0){
x /= 3;
++count;
}
else if(x % 2 != 0 && x % 3 != 0){
--x;
++count;
}
}
cout << count;
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
201030 큐 2 18258번(C++) -컴파일 에러 (0) | 2020.10.30 |
---|---|
201030 접미사 배열 11656번(Python 3) (3) | 2020.10.30 |
201030 큐 2 18258번(C++) - 시간초과 (0) | 2020.10.30 |
201030 A+B-4 10951번(C++) (0) | 2020.10.30 |
201030 블랙잭(Python 3) 2798 (1) | 2020.10.30 |