Lumpy Space Princess - Adventure Time
코딩테스트/백준

백준 [11047] - 동전 0

yaebb_82 2023. 2. 2.

 

 

문제

https://www.acmicpc.net/problem/11047

 

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

 

 

 

작성한 코드

import sys
input = sys.stdin.readline

N, K = map(int, input().split())
money = list()
count = 0

for i in range(N):
    money.append(int(input().rstrip()))

money.reverse()

for j in money:
    n = K // j
  
    if n !=  0:
        count += n
        K %= j

        if K == 0:
            break
    else:
        continue

print(count)

- N과 K를 공백 기준으로 한 줄에 입력받는다.

- money라는 list를 선언하고, N의 개수만큼 for문을 돌려 int형 값을 입력받아 append()로 money리스트에 추가한다.

- 큰 수부터 비교하기 위해서 money리스트를 reverse()를 사용하여 거꾸로 나열한다.

- for문을 돌려 money 안의 값들을 하나씩 꺼내 비교한다.

- 입력받았던 K를 j로 나눈 몫을 n이라는 변수에 저장한다.

- 만약 n의 값이 0이 아니라면(나누어지는 경우),

   동전의 개수를 나타내는 count에 n만큼 더해주고 / K에 K를 j로 나눈 나머지를 저장하고 / 다시 for문을 돈다.

   (이때 K가 0이라면 for문을 break로 벗어난다.)

- 만약 n의 값이 0이라면(나누어지지 않는경우), continue로 패스한다.

- 최종적으로 동전 개수의 최소값을 나타내는 count를 print()로 출력한다.

 

cf.) 내림차순으로 정렬하고자 하는 목적이기도 했고, 문제 상에서 애초에 오름차순으로 입력한다는 조건이 있어 reverse()를 사용하였으나, 정확하게 하려면 sort(reverse=True)를 쓰는게 맞아보인다.

 

cf.) 애초에 몫을 나타내는 n이 0인지 아닌지 if문으로 구분하지 않아도 될 것 같다. count에 0을 더한다고 값이 변하지 않기 때문이다.

 

 

 

반응형

'코딩테스트 > 백준' 카테고리의 다른 글

백준 [11399] - ATM  (0) 2023.02.07
백준 [1931] - 회의실 배정  (0) 2023.02.02
백준 [2581] - 소수  (0) 2022.08.27
백준 [1978] - 소수 찾기  (0) 2022.08.27
백준 [10757] - 큰 수 A+B  (0) 2022.08.25

댓글