-
[백준 2851번] 슈퍼마리오Algorithm/기타 2020. 1. 12. 23:38
백준알고리즘 2851번 : 슈퍼마리오
문제를 정확히 이해하는 데 시간이 조금 걸렸던 것 같다.
요지는, 무조건 처음의 버섯은 먹어야하는 것이다.
즉, 가운데부터 먹고 가운데부터 끊을 수 없다.
시작은 1번부터 하는 것으로 고정이 되는 것이고, 끝은 2번째가 될 지, 10번째가 될지 모르는 것이다.
나는 가운데부터 먹고서도 연속으로 버섯을 먹기만 하면 되는 것인 줄 알고,, 코드를 수정했다.
역시 문제를 잘 파악하는 것이 문제 해결을 위한 첫 번째 단계인것이다..
풀이 과정
1. 버섯 10개의 점수를 받아 배열에 넣는다. 여러 변수들을 정의한 뒤, while문에 조건을 설정하여
해당하는 조건만큼만 while문이 돌아가도록 만든다.
2. while문의 조건은 다음과 같다.
2-1. 다음 버섯이 10번째 버섯이 아니고,(&&)
2-2. 100과 [다음 버섯의 점수+지금까지의 점수 합]의 차이가, 100과 [지금까지의 점수 합]
보다 작거나 같을 경우
3. while문에서 100에 근접한 정답을 추출할 수 있지만, 다음의 경우에 대비하여,
while문이 끝난 뒤에 if문을 통해 어떤 것이 정답인지 찾는다.
[98 4 .. xxx....]인 경우, 98과 102는 100과의 절댓값의 차이는 같지만 102를 정답으로 채택한다.
즉, 절댓값의 차이가 같은 경우, 더 큰 값을 정답으로 저정한다.소스 ▽
더보기import java.util.Scanner; public class Main {// 2851번 슈퍼 마리오 public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] lst = new int[10]; for (int i = 0; i < lst.length; i++) { lst[i] = sc.nextInt(); } int ans = -1; boolean tag = true; int calculate = 0; int k = 0; while (tag == true) { calculate += lst[k]; if (k < 9 && Math.abs(100 - calculate - lst[k + 1]) <= Math.abs(100 - calculate)) { k++; } else { tag = false; } } if (Math.abs(100 - calculate) < Math.abs(100 - ans) || (Math.abs(100 - calculate) == Math.abs(100 - ans) && calculate > ans)) { ans = calculate; } System.out.println(ans); } }
'Algorithm > 기타' 카테고리의 다른 글
[백준 9625번] BABBA (Java 풀이) (0) 2020.01.18 [백준 1834번] 나머지와 몫이 같은 수 (Java 풀이) (0) 2020.01.14 [백준 2740번] 행렬 곱셈 (0) 2020.01.08 [백준 11005번] 진법 변환 2 (1) 2020.01.05 [백준 11655번] ROT13 (0) 2020.01.01