Q 2851 슈퍼 마리오
💡 문제 요약 및 분석
슈퍼 마리오 앞에 10개의 버섯이 놓여 있다. 버섯을 먹고 점수를 100점에 가깝게 만들어 보자. 단, 버섯 먹기를 중단했다면 이후 버섯은 먹을 수 없다. 만약 첫 번째 버섯을 먹지 않았다면 그 이후 버섯도 먹을 수 없는 것이다. 버섯의 점수가 주어졌을 때 마리오가 받는 점수를 출력하자. (만약 100에 가까운 수가 98,102로 2개라면 마리오는 큰 값을 선택한다)
💡 알고리즘 설계
입력받은 값을 순서대로 더한다.
while(i < 10) { 연산 }다음의 경우의 수에 따라 분기한다. 1️⃣ 이전의 값 sum에 새로운 값을 더한 임시 변수 temp == 100 이다.
sum = temp; break;2️⃣ temp > 100 이다. 그러면 이전 값 sum과 비교해야 한다.sum = 100 - sum >= temp - 100 ? temp : sum;sum 변수를 출력한다.
💡 코드
public class Main {
static int read() throws Exception {
int c = 0, n = 0;
while ((c = System.in.read()) > 47) n = (n << 3) + (n << 1) + (c & 15);
return n;
}
public static void main(String[] args) throws Exception {
int i = 0;
int sum = 0;
while (i < 10) {
int score = read();
int temp = sum + score;
if (temp == 100) {
sum = temp;
break;
} else if (temp > 100) {
sum = (100 - sum >= temp - 100) ? temp : sum;
break;
}
sum = temp;
i++;
}
System.out.println(sum);
}
}

💡 시간 복잡도, 공간 복잡도
| 시간 복잡도 | 공간 복잡도 |
|---|---|
| O(1) | O(1) |