[백준 28359] 수열의 가치 [Java]
2025. 8. 23. 18:16ㆍPS 풀이/Baekjoon Online Judge
문제
28359번: 수열의 가치
boj.ma
풀이
문제 요약
주어진 수열이 증가하지 않는 부분 수열(P), 감소하지 않는 부분 수열(C)가 되도록 재배열하여 주어진 규칙대로 수열의 가치가 최댓값을 가지도록 하자.
아이디어
예제의 경우 P = {1, 2, 2}, Q = {3, 2, 2} 로 구성되며, {2, 2}가 중복되어 최대 가치 12를 가진다.
수열의 가치에 중복 계산하는 수를 제외한다면, 수열을 재배열 할 때 P 또는 Q는 1개의 요소로도 충분하므로 정렬을 수행할 수 있다.
P 또는 Q는 부분 수열이므로, 중복 계산되는 수를 포함하는 것으로 충분하다.
중복 계산되는 수는 빈도와 값의 곱이 큰 수로 결정해주자.
// Solve
Arrays.sort(A);
Map<Integer, Integer> freq = new HashMap<>();
for (int a : A) {
freq.put(a, freq.getOrDefault(a, 0) + 1);
}
int maxFreqValue = 0;
for (Map.Entry<Integer, Integer> e : freq.entrySet()) {
final int val = e.getKey();
final int count = e.getValue();
maxFreqValue = Math.max(maxFreqValue, val * count);
}
// Output
sb.append(Arrays.stream(A).sum() + maxFreqValue).append("\\n");
}
아이디어
20분
소스코드
https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/normal/28359.java
problem-solving/baekjoon-online-judge/normal/28359.java at main · rogi-rogi/problem-solving
Daily Problem Solving Challenges. Contribute to rogi-rogi/problem-solving development by creating an account on GitHub.
github.com
'PS 풀이 > Baekjoon Online Judge' 카테고리의 다른 글
| [백준 01374] 강의실 [Java] (3) | 2025.08.26 |
|---|---|
| [백준 10158] 개미 [Java] (0) | 2025.08.25 |
| [백준 25185] 카드 뽑기 [Java] (0) | 2025.08.22 |
| [백준 10546] 배부른 마라토너 [Java] (0) | 2025.08.21 |
| [백준 33957] Golden Section Search [Java] (0) | 2025.08.20 |