-
[이코테 Greedy] 만들 수 없는 금액Coding Test/이것이 코딩 테스트다 2021. 1. 8. 21:09
# 문제
동네 편의점의 주인인 동빈이는 N개의 동전을 가지고 있습니다. 이때 N개의 동전을 이용하여 만들수 없는 양의 정수 금액 중 최솟값을 구하는 프로그램을 작성하세요.
# 입력조건
- 첫째 줄에는 동전의 개수를 나타내는 양의 정수 N이 주어집니다. (1 <= N <= 1,000)
- 둘째 줄에는 각 동전의 화폐 단위를 나타내는 N개의 자연수가 주어지며, 각 자연수는 공백으로 구분합니다. 이때, 각 화폐 단위는 1,000,000 이하의 자연수 입니다.
# 출력조건
- 첫째 줄에 주어진 동전들로 만들 수 없는 양의 정수 금액 중 최솟값을 출력합니다.
# 입력 예시
5 3 2 1 1 9
# 출력 예시
8
내 풀이
from itertools import combinations n = int(input()) coins = list(map(int, input().split())) values = set() # 주어진 동전들로 만들 수 있는 금액들을 담을 집합 # 주어진 동전들 중 1개 ~ N개를 뽑아 만들 수 있는 모든 경우의 수를 구함 for i in range(1, n + 1): data = combinations(coins, i) # 구한 경우의 수의 해당하는 동전으로 만들 수 있는 금액을 values에 담음(집합이므로 중복 되지 않게 저장됨) for case in data: values.add(sum(case)) # 집합을 list화 하여 적은 금액 순으로 정렬함 values_list = list(values) values_list.sort() result = 1 # 1원부터 비교 # 주어진 동전들로 만들 수 있는 모든 금액에 포함되지 않는 최저 금액을 구함 while True: if result not in values_list: break result += 1 print(result)
지향할 답안
n = int(input()) data = list(map(int, input().split())) data.sort() target = 1 for x in data: # 만들 수 없는 금액을 찾았을 때 반복 종료 if target < x: break target += x # 만들 수 없는 금액 출력 print(target)
문제점
논리적이지만 모범 답안에 비해 너무 긴 점이 아쉽다. 그런데 진짜 문제는 지향할 답안이 이해가 안간다.
'Coding Test > 이것이 코딩 테스트다' 카테고리의 다른 글
[이코테 구현-시뮬레이션] 상하좌우 (0) 2021.01.08 [이코테 Greedy] 볼링공 고르기 (0) 2021.01.08 [이코테 Greedy] 모험가 길드 (0) 2021.01.08 [이코테 Greedy] 1이 될 때까지 (0) 2021.01.08 [이코테 Greedy] 숫자 카드 게임 (0) 2021.01.08