728x90
🔗 문제 링크
https://www.acmicpc.net/problem/2851
📌 문제 개요
10개의 버섯 점수가 순서대로 주어진다.
마리오는 버섯을 순서대로 먹으며 점수를 얻고, 목표 점수인 100에 가장 가까운 점수를 만들어야 한다.
만약 100과의 차이가 같은 경우에는 더 큰 점수를 출력
📌 접근 방법
버섯은 주어진 순서대로만 먹을 수 있으므로, 앞에서부터 점수를 계속 더한 누적합을 확인하면 된다.
각 단계마다 현재 누적합이 기존 정답보다 100에 더 가까운지 비교한다.
📌 핵심 아이디어
기준 점수는 100이다.
현재 누적합과 정답 후보의 차이를 비교한다.
Math.abs(100 - sum)
차이가 더 작으면 정답을 갱신하고, 차이가 같다면 더 큰 값을 선택
📌 전체 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int sum = 0;
int answer = 0;
for (int i = 0; i < 10; i++) {
int score = Integer.parseInt(br.readLine());
sum += score;
int currentDiff = Math.abs(100 - sum);
int answerDiff = Math.abs(100 - answer);
if (currentDiff < answerDiff) {
answer = sum;
} else if (currentDiff == answerDiff && sum > answer) {
answer = sum;
}
}
System.out.println(answer);
}
}
📄 정리
- 이 문제는 10개의 점수만 확인하면 되기 때문에 복잡한 알고리즘이 필요하지 않다.
- 순서대로 누적합을 구하면서 100과의 거리를 비교하면 된다.
- 동점일 경우 더 큰 점수를 선택해야 한다는 조건만 주의
728x90
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
| 백준 9461번 : 파도반 수열 (JAVA) (0) | 2026.04.27 |
|---|---|
| 백준 9654번 : 나부 함대 데이터 (JAVA) (0) | 2026.04.26 |
| 백준 4008 특공대 JAVA 풀이 (DP, CHT, 누적합, 시간복잡도) (0) | 2026.04.24 |
| 백준 11444 피보나치 수 6 JAVA 풀이 (행렬 거듭제곱, 분할정복, 시간복잡도) (0) | 2026.04.24 |
| 백준 1149 RGB 거리 JAVA 풀이 (DP, 누적 최소값, 시간복잡도) (0) | 2026.04.24 |