본문 바로가기
Algorithm

백준 2437번 <저울>

by seungh2 2022. 3. 11.

백준 알고리즘 2437번

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

 

2437번: 저울

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

www.acmicpc.net


2437번

입력으로 첫 줄에 저울추의 개수 N이 주어진다. 그 다음 줄에 저울추의 무게를 나타내는 N개의 숫자가 주어진다.

 

출력으로는 주어진 추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 출력하면 된다.


문제 해결

이 문제는 정렬을 이용하여 해결할 수 있다.

먼저 추들을 정렬하고 작은 숫자부터 만들 수 있는 숫자들을 체크한다.

숫자를 체크하기 위해 ans를 사용한다. 양의 정수 무게 중 최솟값을 출력하는 것이기 때문에 ans는 0이 초기값이다.

 

추의 무게가 ans + 1보다 작거나 같으면 해당 무게를 만들 수 있는 것이기 때문에 ans에 추의 무게를 더한다.

ans가 0부터 시작하기 때문에 처음 추의 무게는 1이어야만 다음 추로 넘어갈 수 있다.

또한 1부터 ans까지의 무게를 만들 수 있기 때문에 다음 추의 무게가 W면 ans + W까지 무게를 만들 수 있다.

 

예를 들어 추가 1, 2, 4이면

1로 무게 1을 만들 수 있어 ans = 1이 되고,

2가 1+1보다 작거나 같기 때문에 무게 3까지 만들 수 있어 ans = 3이 된다.

4가 3+1보다 작거나 같기 때문에 무게 7까지 만들 수 있어 ans = 7이 된다.

 

추가 없기 때문에 ans + 1인 8이 양의 정수 무게 중 최솟값이 된다.


코드

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

ans = 0

for w in weights:
    if w <= ans+1:
        ans += w
    else:
        break
print(ans+1)

결과


 

728x90

'Algorithm' 카테고리의 다른 글

백준 2014번 <소수의 곱>  (0) 2022.03.14
백준 1080번 <행렬>  (0) 2022.03.14
백준 16676번 <근우의 다이어리 꾸미기>  (0) 2022.03.11
백준 11066번 <파일 합치기>  (0) 2022.03.10
백준 12849번 <본대산책>  (0) 2022.03.08

댓글