[이코테] 만들 수 없는 금액

Minyoung Lee·2023년 1월 19일
post-thumbnail

코드

풀이 설명

  • 입력된 동전들의 조합 list를 구한다. (조합들의 합, set (중복 제거) 사용)
    • combinations(data, 1~len(data))
    • 조합들의 합(sum) 값을 담은 list를 구현
    • set으로 중복 제거
      -> 이중 배열을 풀어 중복을 제거하였다.
      cdata #이중배열, [[1,2,3],[3,5,6,2]]
      chain(*cdata) #1,2,3,3,5,6,2
      set(chain(*cdata)) #1,2,3,5,6
      list(chain(*cdata))) #[1,2,3,5,6]
  • 해당 list를 순회하며 count(1->2->...) 변수와 함께 검사한다.
  • 1씩 증가하는 count 변수와 맞지 않는 list item이 나오면,
    count 변수에 해당하는 자연수가 비어있는 것으로 간주하고 count를 출력한다.
from itertools import combinations
from itertools import chain

n = int(input())
data = list(map(int, input().split()))
count = 0
cdata = []

for i in range(1, n):
    temp = combinations(data, i)
    temp = map(lambda x: sum(x), temp) #map object
    cdata.append(temp)

cdata = list(set(chain(*cdata))) 
# itertools.chain 의 return 값이 A, B, C,, 와 같은 immutable 값이기에 바로 set함수의 인자에 넣을 수 있음.
# (list 와 같은 mutable 값으로 주지 않음)

for num in cdata:
    count += 1

    if count != num:
        print(count)
        break

    if num == cdata[-1]:
        print(count+1)

이코테 정답 코드

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)
profile
웩알고👩‍💻

0개의 댓글