슈퍼 마리오
1 초 | 128 MB | 24323 | 10049 | 8711 | 41.650% |
문제
슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여져 있다. 이 버섯을 먹으면 점수를 받는다.
슈퍼 마리오는 버섯을 처음부터 나온 순서대로 집으려고 한다. 하지만, 모든 버섯을 집을 필요는 없고 중간에 중단할 수 있다. 중간에 버섯을 먹는 것을 중단했다면, 그 이후에 나온 버섯은 모두 먹을 수 없다. 따라서 첫 버섯을 먹지 않았다면, 그 이후 버섯도 모두 먹을 수 없다.
마리오는 받은 점수의 합을 최대한 100에 가깝게 만들려고 한다.
버섯의 점수가 주어졌을 때, 마리오가 받는 점수를 출력하는 프로그램을 작성하시오.
입력
총 10개의 줄에 각각의 버섯의 점수가 주어진다. 이 값은 100보다 작거나 같은 양의 정수이다. 버섯이 나온 순서대로 점수가 주어진다.
출력
첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다.
예제 입력 1 복사
10
20
30
40
50
60
70
80
90
100
예제 출력 1 복사
100
예제 입력 2 복사
1
2
3
5
8
13
21
34
55
89
예제 출력 2 복사
87
예제 입력 3 복사
40
40
40
40
40
40
40
40
40
40
예제 출력 3 복사
120
코드
package 슈퍼마리오;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static final int TEN_MUSHROOM = 10;
static final int HUNDRED_MUSHROOM = 100;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 10개의 버섯 점수를 저장하기 위해 선언되었습니다.
int[] mushRoomArr = new int[TEN_MUSHROOM];
StringTokenizer st;
for (int i = 0; i < TEN_MUSHROOM; i++) {
st = new StringTokenizer(br.readLine()); // 각 줄의 버섯 점수를 버퍼를 통해 읽고 배열에 저장합니다.
mushRoomArr[i] = Integer.parseInt(st.nextToken());
}
br.close();
int score = 0;
for(int mushroom : mushRoomArr){
score += mushroom; // 누적한 점수를 저장합니다.
// score가 HUNDRED_MUSHROOM (100) 이상인지 확인합니다. 즉, 마리오가 버섯을 먹은 결과가 100을 넘었는지를 검사합니다.
if(score >= HUNDRED_MUSHROOM){
int scoreExceeds100 = score - 100; // score가 100을 초과하는 경우의 차이
int scoreUnder100 = 100 - (score - mushroom); // score가 100 미만인 경우의 차이
if(scoreExceeds100 > scoreUnder100){
score -= mushroom; // 더 가까운 점수를 만드는 경우, 마지막에 더한 버섯 점수를 다시 뺍니다.
// 현재 버섯을 먹지 않고 이전 상태로 되돌립니다.
}
break; // 이미 정답(최적의 선택)을 찾았기 때문에 더 이상 반복할 필요가 없습니다.
}
}
System.out.println(score);
}
}
/*
if(score - 100 > 100 - (score - mushroom)){
score -= mushroom;
}
- 만약 score - 100이 100 - (score - mushroom)보다 크다면, 마리오는 현재 버섯을 먹지 않는 선택을 합니다.
- score - 100은 현재 버섯을 포함했을 때 100을 넘은 양을 나타냅니다.
- 100 - (score - mushroom)은 현재 버섯을 빼고 100에 가깝게 만들기 위해 추가로 먹어야 할 양을 나타냅니다.
- 이 조건은 마리오가 100에 가까운 점수를 만들기 위해 어느 선택이 더 좋은지 판단하는데 사용됩니다.
*/
'여러가지 > 알고리즘 & 자료구조' 카테고리의 다른 글
[백준] 별자리가될수있다면 - 30821번 (0) | 2024.06.13 |
---|---|
[백준] 청정순열 - 25176 (1) | 2024.06.13 |
[백준] 암호 만들기 - 1759번 (0) | 2024.06.13 |
[백준] 단어나누기 - 1251번 (0) | 2024.06.12 |
[백준] 지각 - 10419번 (1) | 2024.06.12 |