문제링크 : https://www.acmicpc.net/problem/2437
2437번: 저울
하나의 양팔 저울을 이용하여 물건의 무게를 측정하려고 한다. 이 저울의 양 팔의 끝에는 물건이나 추를 올려놓는 접시가 달려 있고, 양팔의 길이는 같다. 또한, 저울의 한쪽에는 저울추들만 놓
www.acmicpc.net
접근 과정 :
- 처음에는 감이 오지 않아서, 추의 무게 조합을 모두 구해볼까 생각도 했다.
- 그런데 잴 수 없는 최소 무게는 항상 1부터 시작하더라..
- 그러면, 추를 무게순으로 정렬시켜 놓고 -> 앞에것부터 더해가면 유의미한 현상이 보이지 않을까 생각했다.
- 좀 더 생각을 해보니, 누적합보다 현재 인덱스의 추의 무게가 더 크면 그 누적합을 측정할 수 없다!!
- 그리고 1부터 시작하니, 누적합보다 작은 수는 어떻게든 측정할 수 있더라.!!!!
소스 코드 및 결과 :
package BOJ;
/*
저울
*/
import java.io.*;
import java.util.*;
public class BOJ2437 {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] num = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
num[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(num);
int weight = 1;
for (int i = 0; i < N; i++) {
if (weight < num[i]) {
break;
}
weight += num[i];
}
System.out.println(weight);
}
}
P.S
그리디 알고리즘은 정말 생각 한끗차이로 갈리는 것 같다..
문제에 맞게 여러가지 다양한 방법으로 생각을 해야한다.
그래서 재밌는 거겠지.
'Algorithm' 카테고리의 다른 글
[백준 Gold 2] 17143 낚시왕 - Java (0) | 2021.12.26 |
---|---|
[백준 Silver 4] 11652 카드 - Java (0) | 2021.12.25 |
[백준 Gold 1] 1700 멀티탭 스케줄링 - Java (0) | 2021.12.24 |
[백준 Gold 4] 1339 단어 수학 - Java (0) | 2021.12.23 |
[백준 Gold 4] 1744 수 묶기 -Java (0) | 2021.12.23 |