11047번: 동전 0 (acmicpc.net)
11047번: 동전 0
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)
www.acmicpc.net
첫 번째 문제점: 반복문 작동 오류
계속해서 k값이 변화없이, count 값도 초기값 0 그대로 출력되는 결과 발생.
찾아보니, for문의 range 범위 설정에 문제가 있었다!
아래는 코딩도장의 for와 range의 제대로 된 문법을 찾아왔다.
COS Pro 2급 파이썬: 15.4 숫자를 감소시키기 (dojang.io)
즉, range의 기본 설정은 증가폭이 양수로 되어있기에, 역순으로 범위를 생성하려면
1) 증가폭을 음수로 따로 지정해주어야 한다. 혹은 2) reversed를 사용해 숫자를 반대로 뒤집는 방법도 있다.
====================================================================
15.4 숫자를 감소시키기
>>> for i in range(10, 0): # range(10, 0)은 동작하지 않음
... print('Hello, world!', i)
...
>>> for i in range(10, 0, -1): # 10에서 1까지 역순으로 숫자 생성
... print('Hello, world!', i)
...
Hello, world! 10
Hello, world! 9
Hello, world! 8
... (생략)
Hello, world! 2
Hello, world! 1
>>> for i in reversed(range(10)): # range에 reversed를 사용하여 숫자의 순서를 반대로 뒤집음
... print('Hello, world!', i) # 9부터 0까지 10번 반복
...
Hello, world! 9
Hello, world! 8
Hello, world! 7
... (생략)
Hello, world! 1
Hello, world! 0
======================================================================================
두 번째 문제점: 조건문 설정 오류
k>l[i]가 아닌, k>=l[i]로 등호까지 조건식에 넣어줬어야 제대로 된 결과가 나오게 된다.
반례를 잘 생각해서 조건식을 다시 한 번 검토하는 습관을 기르자!
import sys
input=sys.stdin.readline
n,k=map(int, input().split())
count=0
l=[]
for i in range(n):
l.append(int(input()))
for j in range(n-1, -1, -1): #range 역순 범위 설정
if k>=l[j]: #조건식 등호까지!
count+=k//l[j]
k%=l[j]
if k==0: break
print(count)
'Language > Python' 카테고리의 다른 글
백준 2751번 수 정렬하기 2 & 10909번 수 정렬하기 3 (Python) (0) | 2023.01.20 |
---|