Recent Posts
소소한 개발이야기
[백준 #2851번 JAVA] 슈퍼 마리오 풀이 본문
📄 슈퍼 마리오 [백준 2851번]
문제 풀이
문제는 단순 비교를 통해 해결하였습니다. 총 10개의 버섯을 차례대로 먹을 때 현재까지 먹은 버섯 점수와 다음 버섯을 먹었을 때 점수를 비교해서 100에 가까운 값을 찾는 방법입니다. 먼저 문제의 조건을 살펴보겠습니다.
문제 조건
- 10개의 버섯이 일렬로 놓아져 있다.
- 버섯을 처음부터 나온 순서대로 먹는다.
- 모든 버섯을 먹을 필요는 없고 중간에 중단할 수 있다.
- 중간에 먹는것을 중단하면 이 후에 나온 버섯은 모두 먹을 수 없다.
- 먹은 버섯의 합을 최대한 100에 가깝게 만들어라.
문제 접근
문제 접근 방법은 지금까지 먹은 버섯의 합과 다음 버섯을 먹었을 때의 합을 비교해 100과 가까운지 체크하면 쉽게 해결할 수 있습니다. 다음에 나오는 버섯을 먹지 않는다면 이후 모든 버섯을 먹을 수 없기 때문에 현재까지 먹은 버섯의 합이 100과 가깝다면 그게 답입니다. 따라서 프로그램의 종료 조건은 다음 버섯을 먹지 않았을 때 입니다.
주의 사항
문제에서 주의해야 할 점은 만약 100에 가까운 수가 2개라면 (예: 98, 102) 큰 값을 선택한다. 라고 되어있습니다. 즉, 절댓 값이 100과 가까운 수를 찾는다면 큰 수를 찾을 수 있습니다.
글보단 코드를 보면 더 이해하기 쉽습니다.
🌱 main 함수
// 전역 변수
private static final int GOAL_NUMBER = 100;
public static void main(String[] args) throws IOException {
int currentSum = 0;
for (int i = 0; i < 10; i++) {
int temp = currentSum;
currentSum = min(currentSum, currentSum + Integer.parseInt(br.readLine()));
if (temp == currentSum) break;
}
System.out.println(currentSum);
}
🌱 min 함수
100과 가장 가까운 값을 찾는 함수 입니다.
private static int min(int currentSum, int nextSum) {
return Math.abs(GOAL_NUMBER - currentSum) < Math.abs(GOAL_NUMBER - nextSum) ? currentSum : nextSum;
}
💡 Github에 더 많은 문제 풀이가 있습니다.
'BOJ' 카테고리의 다른 글
[백준 #5397번 JAVA] 키로거 풀이 (0) | 2019.11.12 |
---|---|
[백준 #2437번 JAVA] 저울 풀이 (0) | 2019.07.12 |
[백준 #13300번 JAVA] 방 배정 풀이 (0) | 2019.07.09 |
[백준 #1436번 JAVA] 영화감독 숌 풀이 (0) | 2019.07.09 |
[백준 #2576번 JAVA] 홀수 풀이 (0) | 2019.07.09 |
Comments