[백준/python/2437] 저울

bej_ve·2022년 5월 27일
0

python알고리즘

목록 보기
31/46

문제링크:저울

이 문제는 코드는 간단하지만 논리를 이해하는데 시간이 오래걸렸습니다. 핵심논리는 현재 가지고 있는 추로 만들 수 있는 무게가 1, 3, 5, 7, 8 이라면 x무게의 추가 추가됐을 때 1+x, 3+x, 5+x, 7+x, 8+x의 무게를 더 만들 수 있다는 것입니다.

n=int(input())
list=list(map(int, input().split()))
list.sort()
result=1

for i in list:
    if result<i:
        break
    result+=i
    
print(result)

이 문제에서 핵심은 1부터 무게를 만들어 나갈 때 만들 수 없는 최소숫자를 구하는 것입니다.
그래서 result는 1로 시작했습니다.
result는 현재 가지고 있는 추로 만들 수 있는 최대무게+1로 생각하는게 직관적으로 이해할 수 있는 것 같습니다.(+1을 해주는 이유는 마지막에 만들 수 없는 최소무게를 출력하기 위해서)


[1 1 2 3 6 7 30]을 예시로,

for문을 시작하기 전에는 추가 없기 때문에 만들 수 있는 최대무게는 0이 되고 result는 1이 됩니다.
1. 첫번째 추(1)를 가지게되면 0+1을 만들 수 있기 때문에 result는 2(result+1)가 됩니다.
2. 두번째 추(1)를 가지게되면 0+1, 1+1을 만들 수 있기 때문에 result는 3(result+1)이 됩니다.
3. 세번째 추(2)를 가지게되면 0+1, 1+2, 2+2를 만들 수 있기 때문에 result는 5(result+2)이 됩니다.
4. 네번째 추(3)을 가지게되면 0+3,..., 4+3을 만들 수 있기 때문에 result는 8(result+3)이 됩니다.
5. 다섯번째 추(6)을 가지게되면 0+6,...,7+6을 만들 수 있기 때문에 result는 14(result+6)이 됩니다.
6. 여섯번째 추(7)을 가지게되면 0+7,...13+7을 만들 수 있기 때문에 result는 21(result+7)이 됩니다.
7. 마지막 추(30)을 가지게되면 0+30,...,20+30을 만들 수 있습니다. 이 때, result가 21이었기 때문에 21부터 만들 수 있어야 하는데 마지막추는 30부터 만들 수 있습니다. 그렇기 때문에 21은 만들 수 없는 최소 무게가 됩니다.

0개의 댓글