문제 : 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보다 크게되며

정답과 차이를 수정하지 않는다.

+ Recent posts