-
11047 파이썬 [beakjoon] 코드 리뷰python 알고리즘 2024. 3. 15. 14:48
과거에 푼 전체 코드
coin_list = list(map(int, input().split())) c_kind, tg_value = coin_list[0], coin_list[1] # print(c_kind, tg_value) c_kind_li = [] for i in range(c_kind): c_kind_li.append(int(input())) cnt = 0 # print(c_kind_li) for i in range(1, c_kind+1): while c_kind_li[-i] <= tg_value: cnt += tg_value // c_kind_li[-i] tg_value = tg_value % c_kind_li[-i] print(cnt) # 배운 점 for i in range(1, 10): print(-i) # 이 결과값은 -1 ~ -10 까지이므로 # list 를 거꾸로 돌기 위해서는 range(1, len(li) + 1) # 이렇게 돌려줘야 한다.!!!
풀이 과정 1 : 입력 받기
coin_list = list(map(int, input().split())) c_kind, tg_value = coin_list[0], coin_list[1] # print(c_kind, tg_value) c_kind_li = [] for i in range(c_kind): c_kind_li.append(int(input()))
입력 받을 coin 의 수를 c_kind 선언, 목표 금액을 tg_value 로 선언하고,
(사실 c_kind 보다 coin_num, c_num 등이 더 좋을 것 같다)
이제 코인의 수만큼 코인의 종류를 list 에 입력 받는다.
그럼 이제, 코인의 종류는 list 안에 있고, 목표 금액을 사용할 때, 동전을 최대한 적게 써야한다.
풀이 과정 2 : 반복문 통해 최소 코인 수 쓰기
cnt = 0 # print(c_kind_li) for i in range(1, c_kind+1): while c_kind_li[-i] <= tg_value: cnt += tg_value // c_kind_li[-i] tg_value = tg_value % c_kind_li[-i] print(cnt)
코인을 담아둔 list 는 (과정 1)에서 가장 작은 단위부터 가장 큰 단위로 저장되어있다.
가장 큰 단위로 목표 금액을 나누고, 코인의 수에 저장하고
나눈 나머지는 다시 더 작은 단위에서 나누면 된다는 사고였던 것 같다.
이렇게 반복문이 끝나면, 최소 코인의 수가 딱!!
끝이다
53799203 tpgud10 11047 맞았습니다!! 30616 36 Python 3 / 수정 378 1년 전 지금와서 생각해보니 코인 리스트를 뒤집어서 사용했으면 훨씬 코드가 간결해졌을 것이다.
문제 페이지 링크
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
'python 알고리즘' 카테고리의 다른 글
백준 11650 풀이 및 설명 (0) 2024.03.15 [백준 11047] 숏코딩 리뷰 (파이썬) (0) 2024.03.15 [프로그래머스] 최소 직사각형 문제-완전탐색 (with Python) (0) 2024.03.14