-

1463 1만들기 본문

Algorithm/Baekjoon

1463 1만들기

Boogallee 2018. 1. 30. 22:37



브루트포스로 풀릴것 같은데 왠지 시관초과가 날 것 같다. 


꼭 다시 재귀방법으로 풀어보기로.


변수 정의를 잘 해야겠다.


D[x] 를 "x를 1로 만드는데 필요한 최소한의 연산 횟수" 라고 정의한다면 문제가 쉬워진다.



코드:

#include <iostream>


using namespace std;


int D[1000001];



int main()

{

int X;

cin >> X;


D[1] = 0;

D[2] = D[3] = 1;

int temp = 0;

for (int i = 4; i <= X; i++)

{

D[i] = D[i - 1] + 1;

if (i % 2 == 0){

temp = D[i / 2] + 1;

if (temp < D[i]){

D[i] = temp;

}

}

if (i % 3 == 0){

temp = D[i / 3] + 1;

if (temp < D[i]){

D[i] = temp;

}

}

}


cout << D[X];

return 0;

}

'Algorithm > Baekjoon' 카테고리의 다른 글

2156 포도주 시식  (0) 2018.02.01
1005 ACM craft  (0) 2018.02.01
2579 계단오르기  (0) 2018.01.30
1932 숫자삼각형  (0) 2018.01.30
1021 회전하는 큐[덱]  (0) 2018.01.17
Comments