문제
수 N개가 주어졌을 때, i번째 수부터 j번째 수까지 합을 구하는 프로그램을 작성하시오.
입력
- 첫째 줄: 수의 개수 N과 합을 구해야 하는 횟수 M
- 둘째 줄: N개의 수
- 셋째 줄부터 M개의 줄 : 합을 구해야 하는 구간 i와 j
출력
총 M개의 줄에 i번째 수부터 j번째 수까지 합을 출력
★Key point : 누적합 알고리즘 사용하기
각 구간 입력마다 for문을 돌려서 합을 구하면 런타임 에러가 나기 때문!
- 1 ≤ N ≤ 100,000
- 1 ≤ M ≤ 100,000
- 1 ≤ i ≤ j ≤ N
<최종 CODE>
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Main { // <- 클래스명 너무 중요!!!
public static void main(String[] args) throws Exception {
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int num = Integer.parseInt(stringTokenizer.nextToken());
int quizno = Integer.parseInt(stringTokenizer.nextToken());
long[] S = new long[num + 1];
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
for (int i = 1; i <= num; i++) {
S[i] = S[i - 1] + Integer.parseInt(stringTokenizer.nextToken());
}
for (int q = 0; q < quizno; q++) {
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int i = Integer.parseInt(stringTokenizer.nextToken());
int j = Integer.parseInt(stringTokenizer.nextToken());
// 범위 체크
if (i < 1 || j > num || i > j) {
throw new IllegalArgumentException("Invalid query range");
}
System.out.println(S[j] - S[i - 1]);
}
} catch (Exception e) {
// 예외 처리
System.err.println("Error: " + e.getMessage());
e.printStackTrace();
}
}
}
<CODE 설명>
입력값을 받으면서 각 인덱스까지의 구간합을 배열로 저장하여 꺼내 쓰는 방식
Ex) 1~4까지의 구간 합을 구하려면 2번째 배열의 인덱스 4값에서 0값을 빼 주면 된다.
누적합 알고리즘을 썻는데도 런타임 에러?!
백준 온라인 저지 사이트에 코드를 제출하니 계속해서 런타임 에러가 났다. import 하는 라이브러리 범위를 줄여 필요한 것만 호출하고, 범위 체크와 예외처리 코드를 작성했는데도 계속해서 런타임 에러..
해결
출하고, 범위 체크와 예외처리 코드를 작성했는데도 계속해서 런타임 에러가 났다. 게시판에 질문을 한 결과,
클래스명의 문제였다.
이클립스로 코드를 실행해 보고 붙여넣기 하다 보니까 미처 신경 쓰지 못했던 부분이었다
https://help.acmicpc.net/language/info
여러 경우가 있으므로 당황하지 말기! 알고리즘엔 문제가 없었다!
※ 20일에 자바로 코팅테스를 봐야 하는 일정이 생겨 파이썬이 아닌 자바로 연습하는 과정에서 만난 문제 ૮ .• ﻌ • ა
'Algorithms' 카테고리의 다른 글
[JAVA] 백준 2018 수들의 합 (1) | 2023.11.19 |
---|---|
[Python] 백준 3190 뱀 (0) | 2023.11.18 |
이코테 - 만들 수 없는 금액(Python) (0) | 2023.11.13 |
Programmers Day 11 (0) | 2023.07.27 |
Programmers Day 10 (0) | 2023.07.21 |