그리디 알고리즘
- 그리디 알고리즘(탐욕법)은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미합니다.
- 일반적인 그리디 알고리즘은 문제를 풀기 위한 최소한의 아이디어를 떠올릴 수 있는 능력을 요구합니다.
- 그리디 해법은 그 정당성 분석이 중요합니다.
- - 단순히 가장 좋아보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토
- 일반적인 상황에서 그리디 알고리즘은 최적의 해를 보장할 수 없을 때가 많습니다.
- 하지만 코딩 테스트의 대부분의 그리디 문제는 탐욕법으로 얻은 해가 최적의 해가 되는 상황에서, 이를 추론할 수 있어야 풀리도록 출제됩니다.
<그리디> 1이 될 때까지: 문제 설명
어떠한 수 N이 1이 될 때까지 다음의 두 과정 중 하나를 반복적으로 선택하여 수행하려고 합니다. 단, 두 번째 연산은 N이 K로 나누어 떨어질 때만 선택할 수 있습니다.
1. N에서 1을 뺍니다.
2. N을 K로 나눕니다
예를 들어 N이 17, K가 4라고 가정합시다. 이때 1번의 과정을 한 번 수행하면 N은 16이 됩니다. 이후에 2번의 과정을 두 번 수행하면 N은 1이 됩니다. 결과적으로 이 경우 전체 과정을 실행한 횟수는 3이 됩니다. 이는 N을 1로 만드는 최소 횟수입니다.
N과 K가 주어질 때 N이 1이 될때까지 1번 혹은 2번의 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 작성하세요.
문제 해결 아이디어
우선 n을 k 로 나누었을 때의 몫이 무조건 정수가 아닐 수 있다.
그렇기 때문에 //연산자를 이용하여 몫의 정수부분만 추출해내고, 그 값에 다시 몫의 정수부분을 곱하여
원래의 값과 비교하여 두 수의 차만큼 answer에 더해주면, 1을 빼는 과정을 카운트한 것과 같은 로직이 된다.
1. 소스코드
def solution(n, k):
answer = 0
a = 0
while True:
a = (n//k) * k # 25 , 4, -> a = 24
answer += n - a # answer = 1
if n<k:
break
answer += 1
n = n // k
print(answer)
return answer
solution(25,4)
출처 :
https://www.youtube.com/watch?v=2zjoKjt97vQ&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=2
'코딩테스트 연습' 카테고리의 다른 글
[Python] 이코테 2021 <구현> 왕실의 나이트 (0) | 2022.02.26 |
---|---|
[Python] 이코테 2021 <구현> 상하좌우 (0) | 2022.02.24 |
[Python] 이코테 2021 <구현> 시각 (0) | 2022.02.24 |
[Python] 이코테 2021 <그리디> 모험가 길드 (0) | 2022.02.24 |
[Python] 이코테 2021 <그리디> 곱하기 혹은 더하기 (0) | 2022.02.23 |