알고리즘
[07.15] 백준 11047 - 동전 0 (파이썬)
ljw4104
2021. 7. 15. 01:50
그리디 알고리즘에 기초 of 기초 문제이다.
동전의 가치가 오름차순으로 주어지기 때문에 가장 큰 값부터 차례대로 내려오면서 계산하면 된다.
하지만 처음 시도했을 때는 시간 초과를 발생시켰다.
#백준 11047 동전 0 - 그리디 알고리즘
tn, tk = input('').split()
n = int(tn)
k = int(tk)
coin = []
cnt = 0
for i in range(n):
coin.append(int(input('')))
for i in range(len(coin) - 1, -1, -1):
if(coin[i] <= k):
while coin[i] <= k:
k -= coin[i]
cnt += 1
if(k == 0):
break
print(cnt)
for문의 if문 안의 while문 때문에 시간초과가 발생한 것 같다. 이중for문을 돌리는 것과 같은 시간이 O(n^2) 시간이 소요되었을 것이다.
최종 코드는 이것이다.
11047.py
tn, tk = input('').split()
n = int(tn)
k = int(tk)
coin = []
cnt = 0
for i in range(n):
coin.append(int(input('')))
for i in range(len(coin) - 1, -1, -1):
if(coin[i] <= k):
cnt += k // coin[i]
k = k % coin[i]
if(k == 0):
break
print(cnt)
range쓰는 습관 기르기
소숫점 없애고 싶을 때는 // 연산자 사용하기
파이썬에서 한 줄에 여러개의 값을 받기 위해서는 다음과 같이 받아야 한다.
예를 들어 15, 20을 받는다고 치면
n, k = input('').split()
split() 함수에 인자를 안넣으면 공백으로 처리한다.
다만 n, k는 여기서 문자열이므로 따로 int로 바꾸어주어야한다.