1이 될 때까지 - 그리디 알고리즘

rrosiee·2022년 7월 24일
0

알고리즘

목록 보기
6/18

이것이 취업을 위한 코딩테스트다 99쪽

문제

어떠한 수 N이 1이 될 때 까지 다음의 두 과정 중 하나를 반복적으로 선택해 수행하려 함

단, 두번째 연산은 N이 K로 나누어 떨어질 때만 선택할 수 있음

N에서 1을 뺀다.

N을 K로 나눈다.

N이 1이 될 때 까지 1번 혹은 2번의 과정을 수행해야하는 최소 횟수를 구하는 프로그램을 작성

입력

첫째 줄에 N(2<= N <= 100000)과 K(2 <= K <= 100000)가 공백으로 구분되며 각각 자연수로 주어짐

이때, 입력으로 주어지는 N은 항상 K보다 크거나 같음

출력

첫째 줄에 N이 1이 될 때까지 1번 혹은 2번의 과정을 수행해야 하는 횟수의 최솟값을 출력

입력 예시

3 3
3 1 2
4 1 4
2 2 2

출력 예시

2

내가 푼 방법

result = N % K
N = N - result
while N != 1:
    N = N / K
    result += 1
print(result)

책에서 푼 방법

n, k = map(int, input().split())
result = 0
while n >= k:
    while n % k != 0:
        n -= 1
        result += 1
    n //= k
    result += 1

while n > 1:
    n -= 1
    result += 1

print(result)

배운 점

이번에는 내 코드가 더 간결한 것 같다. 그럼에도 배울 수 있었던 점이 있었다. 그리디 알고리즘의 핵심은, 알고리즘 문제의 핵심을 파악하는 것이다. 대충 풀지말고, '최대한 많이 나눠 연산 횟수를 줄이기' 라는 원리를 파악하는 것이 중요한 문제였다.

profile
배포 버튼을 누를 때마다 심장이 두근거리는 사람

0개의 댓글

관련 채용 정보