오늘의 학습 키워드
그리디란?
- 최적의 값을 구해야 하는 상황에서 사용되는 근시안적인 방법론으로 ‘각 단계에서 최적이라고 생각되는 것을 선택’ 해 나가는 방식으로 진행하여 최종적인 해답에 도달하는 알고리즘이다.
- 이때, 항상 최적의 값을 보장하는것이 아니라 최적의 값의 ‘근사한 값’을 목표로 하고 있다.
- 주로 문제를 분할 가능한 문제들로 분할한 뒤, 각 문제들에 대한 최적해를 구한 뒤 이를 결합하여 전체 문제의 최적해를 구하는 경우에 주로 사용된다.
https://www.acmicpc.net/problem/27961
목표 고양이 수에 도달하기 위해 그리디 접근으로 최소 행동 횟수 계산.
탐색 과정 (목표 고양이 수 6에 도달하기 위해 최소 행동 횟수 계산)
따라서 목표 고양이 수 6에 도달하기 위해 최소 행동 횟수는 4번이다.
1. 기본 설정 및 입력 처리
n = int(input())
current, count = 1, 1
if n == 0:
print(0)
exit()
n = int(input())
: 키우고자 하는 목표 고양이 수를 입력받는다.current, count = 1, 1
: 초기 고양이 수를 1마리로 설정하고, 행동 횟수(count)를 1로 설정한다.if n == 0
: 만약 목표 고양이 수가 0인 경우, 행동 횟수는 0이므로 바로 출력하고 종료한다.2. 목표 고양이 수 달성하기 위한 반복
while current < n:
current *= 2
count += 1
3. 결과 출력
print(count)
: 목표 고양이 수에 도달했을 때 최소 행동 횟수를 출력한다.왜 복제만 할까?
목표 고양이 수 N이 주어졌을 때 최적의 행동을 통해 목표에 도달하기 위함이다. 만약 N이 크면, 처음에 생성 마법을 이용하여 한 마리씩 고양이를 추가하는 것은 비효율적이다. 대신, 처음부터 1마리의 고양이로 시작한 후, 복제 마법을 사용하여 빠르게 고양이 수를 늘리는 것이 행동 횟수를 줄일 수 있기 때문에 코드에서는 복제 마법만 반복해서 사용하는 방식으로 구현한 것이다.
즉, 첫 1마리를 생성하고 나서 이후에는 복제만을 사용해 고양이 수를 두 배씩 늘려가도록 하여 최소한의 행동으로 목표 고양이 수를 달성하려고 한 것이다.
n = int(input())
current, count = 1, 1
if n == 0:
print(0)
exit()
while current < n:
current *= 2
count += 1
print(count)
🔥 Greedy는 이해가 가면서 가지 않는다. 그냥 최대한 출력값이 나오게 하는듯,.,? 문제를 더 적용해봐야될 듯..