728x90

문제)

 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다.

  1. X가 3으로 나누어 떨어지면, 3으로 나눈다.
  2. X가 2로 나누어 떨어지면, 2로 나눈다.
  3. 1을 뺀다.

 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오.

 

입력)

 첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

 

출력)

첫째 줄에 연산을 하는 횟수의 최솟값을 출력한다.


from collections import deque

N = int(input())

nums = deque([N])
ans = 0
while 1 not in nums:
    for num in nums.copy():
        nums.popleft()
        if num % 3 == 0: nums.append(num // 3)
        if num % 2 == 0: nums.append(num // 2)
        nums.append(num - 1)
    ans += 1
print(ans)

풀이 :

 아래 그림은 입력이 10일 때 해당 코드가 동장하는 것을 도식화 한 것이다.

 9줄의 popleft()를 사용하여 계산에 사용된 이전 숫자들을 모두 제거해주어 새로운 결과값만 nums에 남도록 해주었다.

+ Recent posts