우선 내가 작성한 코드이다.
import java.io.*;
public class P2851 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int i = 10;
int[] numArr = new int[i];
int[] prefixSum = new int[i+1];
for(int j = 0; j < i; j++) {
numArr[j] = Integer.parseInt(br.readLine());
prefixSum[j+1] = numArr[j] + prefixSum[j];
if(prefixSum[j+1] >= 100) {
int result = (prefixSum[j+1] - 100 > 100 - prefixSum[j])
? prefixSum[j] // 작은 값을 반환하고
: prefixSum[j+1]; // 같거나 큰 값이 더 가까운 경우 큰 값을 반환
System.out.println(result);
break;
}
else if(j == 9)
System.out.println(prefixSum[10]);
}
}
}
우선 numArr에 숫자를 입력 받고, prefixSum 배열엔 누적합을 구하여 저장한다.
저장 후 prefixSum의 요소가 100이상이라면, 현재 요소와 이전 요소를 100과의 차이를 구한다.
조건식이 아래와 같을 때, 차이가 동일한 경우의 조건식은 생략할 수 있다.
(prefixSum[j+1] - 100 > 100 - prefixSum[j])
이렇게 100을 넘었다면 값을 입력 받을 필요가 없고, result 변수에 올바르지 않은 값이 저장되므로 반복문을 종료했다.
마지막으로, 총 합이 100을 넘지 않았다면, 마지막에 있는 요소의 값이 100에 제일 가까우므로
else if(j == 9)
System.out.println(prefixSum[10]);
를 출력하도록 했다.
'알고리즘 분류 > 누적합' 카테고리의 다른 글
10211 Maximum Subarray JAVA (0) | 2023.04.04 |
---|---|
2167 2차원 배열의 합 JAVA (0) | 2023.04.04 |
11660 구간 합 구하기 5 JAVA (0) | 2023.04.02 |
11441 합 구하기 JAVA (0) | 2023.04.01 |
23827 인간-컴퓨터 상호작용 (0) | 2023.04.01 |