프로필사진

Go, Vantage point

가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.


Github | https://github.com/overnew/

Blog | https://everenew.tistory.com/





티스토리 뷰

반응형

문제

 

www.acmicpc.net/problem/2437

 

2437번: 저울

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

www.acmicpc.net

 

풀이

 

solved.ac 난이도: Gold3

 

그리디 알고리즘 문제이지만 DP문제에서 많이 본 유형이라 문제 분류를 몰랐다면 DP로 접근했을 듯한 문제였다.

 

해당 문제의 그리디 알고리즘은 다음과 같다.

 

일단 추를 무게의 오름차순으로 정렬했다 가정하자.

지금까지 idx번째의 추까지 사용하여 만들 수 있는 무게들 중 가장 큰 것을 end_num라고 하자.

다음 추 idx+1를 추가적 이용하여 만들 수 있는 무게들은 0,1,2 ~ end_num들에 모두 idx+1의 무게를 더한 것과 같다.

즉, end_num은 end_num +weight_list[idx+1]이 되고 만들 수 있는 무게는 1~end_num+weight_list[idx+1]이다.

 

만약 다음 추의 무게(weight)end_num+1 보다 크다면

0,1,2 ~ end_num들에 모두 해당 값을 더해주어도만들 수 있는 무게 0~end_num에서 끊기고, weight~end_num+weight가 된다.

따라서 이런 경우 정답은 만들 수 있는 최댓값의 다음 값인 end_num+1이다.

 

예를 들어 

1 1 2 2 8의 추가 주어진다면 

 

1 -> end_num: 1

1 -> end_num: 2

2 -> end_num: 4

2 -> end_num: 6

8 -> end_num +1 < 8

 

따라서 답은 end_num+1인 7이다.

 

추가적으로 end_num +1 < weight_list[idx]인 경우가 없을 수도 있기 때문에

이 경우에는 최종 end_num에 +1 한 만들 수 없는 무게의 최솟값이 답이 된다.

 

코드

 

 

반응형
댓글
반응형
인기글
Total
Today
Yesterday
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함