336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

9달전에 풀었던 문제였는데 다시 한번 풀어보았다. 


이 문제를 요약하면, 입력으로 주어지는 수를 총 3가지 연산을 이용하여 1까지 만드는 최소 연산의 횟수를 구한다.


총 3가지 연산은 

1) 3으로 나눠지면 3으로 나눈다.

2) 2로 나눠지면 2로 나눈다.

3) -1 한다. 


입력의 범위는 [1, 1E+6] 

출력의 범위 또한 0부터 최대 1E+6보다는 작은 수 일 것이다.


그러면 이것을 만들기 위해서 값을 정해두고, 값을 계속 업데이트 하는 방식으로 코드를 작성했다.

dp[x] : 입력한 수부터 x까지 도달하는 최소 연산 횟수

void dy(int x) : 입력한 x 수에서 부터 다음 최소 연산 횟수를 구하기 위한 함수, 총 3가지연산을 시행했을 시 가능한 것을 업데이트 한다.


총 배열의 크기는 1E+6 개 보다 더 많게 설정하고, 모두 INF 으로 설정한다. 

그리고 매 시행마다 도달할 수 있는 최소 횟수를 업데이트 할 수 있다면, 업데이트 한다. 


9달전에 작성했을 때는 bottom-up 방식으로 작성했던 것 같다.

지금 작성한 방식은 top-down 방식으로 작성한 것이다.





'PSNote > Problem Solving' 카테고리의 다른 글

[BOJ-2231]분해합  (0) 2017.07.17
[BOJ-12852]1로만들기2  (0) 2017.07.17
[BOJ-1167]트리의지름  (0) 2017.07.17
[BOJ-11653]소인수분해  (0) 2017.07.17
[BOJ-14582]오늘도졌다  (0) 2017.07.17

+ Recent posts