Algorithm/Greedy

[백준] 2437. 저울 / 파이썬 (python)

Dev_Green 2022. 7. 9. 23:50

https://www.acmicpc.net/problem/2437

 

2437번: 저울

하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓

www.acmicpc.net


문제 풀이 

문제를 관통하는 키워드는 '누적합'이다. 


예를 들어, 

아래와 같이 주어졌다고 가정해보자. 

 4
 1 2 4 5

가장 작은 추 하나만 가지고 있는 상태에서 하나씩 추가로 가지게 된다고 생각하면

1만 가지고 있을 때는 측정 가능범위 [0, 1]

2가 추가되면 [0, 1] + [2, 3] = [0, 3]

4가 추가되면 [0, 3] + [4, 7] = [0, 7]

5가 추가되면 [0, 7] + [5, 12] = [0, 12]

 

즉, "새로 추가된 추의 무게 <= 현재까지의 누적합" 이어야
0부터 공백 없이 누적합(새로 추가된 무게까지 포함)까지의 범위를 커버할 수 있는 것이다.

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

target = 1
for i in weights:
    if target < i:
        break
    else:
        tar += i
print(target)

 

아래와 같이 해도 결과값은 정상적으로 도출되었으나 제출 결과 '틀렸습니다'를 받았다.

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

acc = 0
if n == 1:
    if weights[0] >= 2:
        print(1)
    else:
        print(2)
else:       
    for i in range(n-1):
        acc += weights[i]
        if weights[i+1] <= acc:
            continue
        else:
            print(acc+1)