문제 : https://www.acmicpc.net/problem/2851
2851번: 슈퍼 마리오
첫째 줄에 마리오가 받는 점수를 출력한다. 만약 100에 가까운 수가 2개라면 (예: 98, 102) 마리오는 큰 값을 선택한다.
www.acmicpc.net
문제 요약 : 연속되는 합중에서 100에 가장 가까운 수 출력(여러 개일 경우 큰 수)
입력 | 출력 |
10줄의 점수 | 100에 가장 가까운 최대 연속합 |
JAVA
소스코드 : https://github.com/cbkpar/BOJ/blob/main/boj_2851.java
채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
30601209 | cbkpar | 2851 | 맞았습니다!! | 14104KB | 132ms | Java 11 | 517B |
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i,d,ans;
int[] arr = new int[11];
d = 100;
ans = 0;
for(i=1;i<=10;i++) {
arr[i] = arr[i-1] + Integer.parseInt(br.readLine());
if(d>=Math.abs(arr[i]-100)) {
d = Math.abs(arr[i]-100);
ans = arr[i];
}
}
System.out.println(ans);
}
}
초기값으로 차이를 100, 정답을 0 으로 둔 뒤
각 점수 값을 이전의 점수 값과 합쳐 (부분합)
그 값과 차이가 현재까지 구한 차이보다 같거나 작을 경우 정답을 수정하면 된다.
이때 차이는 100을 기준으로 절대값으로 계산한다.
예제) 입력값이 40,40,40,40,... 일경우
첫번째 입력값에서 차이가 60 되므로 기존 100보다 작거나 같게되며
정답을 40, 차이값을 60으로 수정한다.
두번째 입력값에서 차이가 20이 되므로 차이값 60보다 작거나 같게되며
정답을 80, 차이값을 20으로 수정한다.
세번째 입력값에서 차이가 20이 되므로 차이값 20보다 작거나 같게되며
정답을 120, 차이값을 20으로 수정한다.
네번째 입력값에서 차이가 60이 되므로 차이값 20보다 크게되며
정답과 차이를 수정하지 않는다.
'백준온라인' 카테고리의 다른 글
[백준온라인] 1940번 주몽 (0) | 2021.07.03 |
---|---|
[백준온라인] 11091번 알파벳 전부 쓰기 (0) | 2021.07.03 |
[백준온라인] 2847번 게임을 만든 동준이 (0) | 2021.07.03 |
[백준온라인] 2703번 Cryptoquote (0) | 2021.07.03 |
[백준온라인] 2998번 8진수 (0) | 2021.07.03 |