[백준 2347] 저울 (자바)
알고리즘/백준

[백준 2347] 저울 (자바)

반응형

백준 2347번 저울 (자바)

 

 

 

출처

www.acmicpc.net/problem/2437

 

2437번: 저울

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

www.acmicpc.net

 

 

 

문제

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

무게가 양의 정수인 N개의 저울추가 주어질 때, 이 추들을 사용하여 측정할 수 없는 양의 정수 무게 중 최솟값을 구하는 프로그램을 작성하시오.

예를 들어, 무게가 각각 3, 1, 6, 2, 7, 30, 1인 7개의 저울추가 주어졌을 때, 이 추들로 측정할 수 없는 양의 정수 무게 중 최솟값은 21이다. 

 

 

 

입력

첫 째 줄에는 저울추의 개수를 나타내는 양의 정수 N이 주어진다. N은 1 이상 1,000 이하이다. 둘째 줄에는 저울추의 무게를 나타내는 N개의 양의 정수가 빈칸을 사이에 두고 주어진다. 각 추의 무게는 1 이상 1,000,000 이하이다.

 

 

 

출력

첫째 줄에 주어진 추들로 측정할 수 없는 양의 정수 무게 중 최솟값을 출력한다.

 

 

 

 

입출력 예

 

 

 

걸린 시간

1시간 좀 넘게 걸린 것 같다.

 

 

 

접근 방법

그리디 문제라는데 그리디란 뭘까... 어렵다

신박한 개념으로 문제를 풀었다. (물론 다른분들의 도움으로ㅎㅎ)

정렬시킨 후 누적합을 이용해서 문제를 푸는데 현재 누적합과 다음 누적합 사이의 값은 주어진 값들로 모두 만들 수  있다는 것이다. (모두 만들 수 있다는 게 굉장히 신기했다... 이런 걸 어떻게 생각하는 거지)

예를 들어, 1 1 2 3 6 7 30 이 주어졌을 때

누적합은   1 2 4 7 13 20 50 이다.

 

누적합 사이의 값들을 주어진 수로 만들 수 있는지 확인해보겠다.

1 일 때 1을 만들 수 있다.

2 일 때 2을 만들 수 있다.

4 일때 3(1,2)을 만들 수 있다.

7 일때 5(2,3), 6(1,2,3)을 만들 수 있다.

13 일때 8, 9, 10, 11, 12을 만들 수 있다.

20 일때 14, 15, 16, 17, 18, 19을 만들 수 있다.

50 일때 21을 만들 수 없다!

 

위와 같은 경우(이전 누적합+1)를 만들 수 없는 경우가 바로 측정할 수 없는 양이다. 이 경우가 바로 누적합이 다음 원소보다 작은 경우다. 때문에 조건을 만족하면 바로 반환하도록 하였다.

 

 

 

 

내 코드

 

 

 

고려할 점

1. 그리디 사용할 것

2. 조건을 생각할 것

 

 

 

반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 1719] 택배 (자바)  (0) 2021.02.14
[백준 14890] 경사로 (자바)  (0) 2021.02.07
[백준 1915] 가장 큰 정사각형 (자바)  (0) 2021.02.03
[백준 10282] 해킹 (자바)  (1) 2021.02.02
[백준 2467] 용액 (자바)  (0) 2021.02.02