백준 11047: 동전 0

송병훈·2022년 7월 9일

입력
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)
둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

출력
첫째 줄에 K원을 만드는데 필요한 동전 개수의 최솟값을 출력한다.


그리디 알고리즘 문제다.

그리디 알고리즘이 문제로 나올 때는
나누는 수들이 배수관계라
자연스레 최솟값을 구할 수 있다.

동전의 개수는 몫을 이용해 세고,
다음 반복(while)으로 넘어가기 전에
나머지 금액을 저장하여 넘기면 된다.


이 문제에서 새롭게 알게 된 것은 여러 수를 입력받을 때
input().split(' ') 의 변형방법이다.

공백을 기준으로 한 줄에 여러 입력을 받을 때 split(' ')이나 split()을 사용했다.

sys를 사용해 띄어진 수를 입력받으려면
sys.stdin.readline() 뒤에 ".strip().split(' ')" 을 적어줘야 하고,

정수로 입력받으려면
int(sys.stdin.readline().strip().split(' ')) 가 안 되기에

  1. map을 사용해서 map(int, sys.stdin.readline().strip().split(' ')) 으로 적거나

  2. N, K = sys.stdin.readline().strip().split(' ')
    N, K = int(N), int(K)
    처럼 각각 변수에 저장한 후에 정수로 바꿔줘야 한다.


결론

  • 여러 수를 빠르게 입력받으려면
    map(int, sys.stdin.readline().strip().split(' ')) 을 사용하자!!
profile
성실하고 꼼꼼하게

0개의 댓글