슈퍼 마리오
1 초 | 128 MB | 11633 | 4578 | 4047 | 40.010% |
문제
슈퍼 마리오 앞에 10개의 버섯이 일렬로 놓여져 있다. 이 버섯을 먹으면 점수를 받는다.
슈퍼 마리오는 버섯을 처음부터 나온 순서대로 집으려고 한다. 하지만, 모든 버섯을 집을 필요는 없고 중간에 중단할 수 있다. 중간에 버섯을 먹는 것을 중단했다면, 그 이후에 나온 버섯은 모두 먹을 수 없다. 따라서 첫 버섯을 먹지 않았다면, 그 이후 버섯도 모두 먹을 수 없다.
마리오는 받은 점수의 합을 최대한 100에 가깝게 만들려고 한다.
버섯의 점수가 주어졌을 때, 마리오가 받는 점수를 출력하는 프로그램을 작성하시오.
입력
총 10개의 줄에 각각의 버섯의 점수가 주어진다. 이 값은 100보다 작거나 같은 양의 정수이다. 버섯이 나온 순서대로 점수가 주어진다.
출력
첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다.
풀이
인덱스 내부에서 100이 넘을 때까지 더하고 이전값과 현재값을 비교해 100과의 차이가 더 적은 수를 반환합니다.
100을 기준으로 100보다 작은 값, 큰 값 구하기
구하는 값이 두 개므로 변수를 두 개 사용해야합니다.
한 변수는 100을 넘기 전까지의 합을 기록해야하고 한 변수는 100을 넘었을 때의 합을 기록해야합니다.
100을 처음 넘었을 때 그 값을 구한 다음 다시 그 값에서 더해줬던 값을 빼서 100을 넘기 전의 값을 구할 수 있습니다.
이 두개를 비교해 100에 가장 가까운 수를 고르고 출력하면 됩니다.
이 풀이에서는 위 방법과 조금은 다르게 이전항에 현재항을 대입하고 현재항에 값을 더하는 식으로 구현했습니다.
전체 코드
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int prev=0,now=0;
for(int i=0; i<10; i++) { //10개의 입력값
prev = now; //현재 now 값을 이전값 prev에 저장합니다
now += sc.nextInt(); //그리고 now에 다음 값을 더합니다
if(now>=100) { // now가 100을 넘기는 순간: prev에는 100보다 작은 값, now에는 100보다 큰 값이 저장
i=10; //반복문을 종료합니다.
}
}
if(now-100<=Math.abs(100-prev)) { // 그 둘을 비교하고 100과의 차이가 적은 수를 내보냅니다
System.out.println(now);
}else {
System.out.println(prev);
}
}
}
'Study > Baekjoon' 카테고리의 다른 글
[Python] Baekjoon2630: 색종이 만들기 (0) | 2022.02.17 |
---|---|
[Java] Baekjoon14696: 딱지놀이 (0) | 2022.02.17 |
[Java] Baekjoon11723: 집합, 비트마스킹 구현 (0) | 2022.02.16 |
[Java] Baekjoon1592: 영식이와 친구들 (0) | 2022.02.16 |
[Java] Baekjoon1074: Z (0) | 2022.02.15 |