참조 유튜브
➡️ 그리디 알고리즘으로 나온 결과는 19. 그러나 최대값은 21
이처럼 최적의 해를 보장할 수 없을 때가 많음
But,
코딩 테스트에서의 대부분의 그리디 문제는 탐욕법으로 얻은 해가 최적의 해가 되는 경우에 한해 문제 출제됨
n = 1260
count = 0
#큰 단위의 화폐부터 차례대로 확인하기
array = [500, 100, 50, 10J
for coin in array:
count += n // coin # 해당 화폐로 거슬러 줄 수 있는 동전의 개수 세기
n %= coin
print(count)
# N, K을 공백을 기준으로 구분하여 입력 받기
n, k = map(int, input().split())
result = 0
while True:
#N이 K로 나누어 떨어지는 수가 될 때까지 빼기
target = (n // k) * k # N이 K로 나누어 떨어지지 않을 경우 N과 가장 가까운, K로 나누어 떨어지는 수 구하기
result += (n - target) # 1을 빼는 연산 수행의 횟수 구하기
n = target
# N이 K보다 작을 때 (더 이상 나눌 수 없을 때) 반복문 탈출
if n < k:
break
# K로 나누기
result += 1
n //= k
# 마지막으로 남은 수에 대하여 1씩 빼기
result += (n - 1)
print (result)
O(logn)
그리디 aka 구현 aka 시뮬레이션 aka 완전 탐색 문제
# 현재 나이트의 위치 입력받기
pos = input()
row = int(pos[1])
col = int(ord(pos[0]) - ord('a')) + 1
# 나이트가 이동할 수 있는 8가지 방향 정의
steps = [(-2, -1), (-2, 1), (2, -1), (2, 1), (1, -2), (1, 2), (-1, 2), (-1, -2)]
# 8가지 방향에 대하여 각 위치로 이동이 가능한지 확인
result = 0
for step in steps:
# 이동하고자 하는 위치 확인
next_row = row + step[0]
next_col = col + step[1]
# 해당 위치로 이동이 가능하다면 카운트 증가
if next_row < 1 or next_row > 8 or next_col < 1 or next_col > 8:
continue
result += 1
print(result)
좌표를 움직이는 시뮬레이션 문제의 경우 steps와 같이 한 번 움직일 시 변경되는 좌표를 튜플로 만들어놓고, for문을 돌리는 방식으로 풀어가면 될 것 같다.