가장 큰 지폐 단위부터 차례대로 계산하면 되는 그리디 알고리즘인 듯 했다. 따라서 다음과 같이 풀었다:
시간 초과 뜬 풀이
import sys
N, K = map(int, sys.stdin.readline().split())
values = []
for i in range(N):
value = int(sys.stdin.readline())
if value < K:
values.append(value)
values.sort(reverse=True)
count = 0
for j in values:
while True:
if K >= j:
K -= j
count += 1
else:
break
print(count)
파이썬 IDLE 에서 확인해보니 정답은 맞다. 하지만 while문
을 실행하는 것이라 시간 초과가 뜰 수 밖에 없는 듯 하다. 따라서 다음과 같이 간단하게 바꿔서 풀었다.
제출한 정답
import sys
N, K = map(int, sys.stdin.readline().split())
values = []
for i in range(N):
value = int(sys.stdin.readline())
if value <= K:
values.append(value)
values.sort(reverse=True)
count = 0
for j in values:
if K >= j:
num = K//j
K -= j*num
count += num
else:
continue
print(count)
단순히 for문
한개를 사용하여 풀었는데, 이는 각 지폐 단위에 대하여 K
에 대해 몫을 구하는 방식을 사용하여 while문
으로 처리할 것을 한방에 처리하면서 시간을 단축 할 수 있었다.
'알고리즘 테스트 > 백준 문제풀이 및 해설' 카테고리의 다른 글
<백준 문제풀이: 5086번> 파이썬 - 배수와 약수 (0) | 2020.12.24 |
---|---|
<백준 문제풀이: 11399번> 파이썬 - ATM (2) | 2020.12.20 |
<백준 문제풀이: 11054번> 파이썬 - 가장 긴 바이토닉 부분 수열 (0) | 2020.12.18 |
<백준 문제풀이: 15652번> 파이썬 - N과 M(4) (0) | 2020.12.16 |
<백준 문제풀이: 9461번> 파이썬 - 파도반 수열 (0) | 2020.12.15 |