문제 출처 : https://www.acmicpc.net/problem/11659
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main{
public static void main(String[] args) throws IOException{
// 1.많은 값 받아야 되므로 Scanner보다 속도가 빠른 BufferedReader 사용
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
// 2. 긴 값을 입력받으므로 StringTokenizer 사용.
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
// 3. 처음으로 받을 값 변수 초기화
int suNo = Integer.parseInt(stringTokenizer.nextToken()); // 받을 숫자의 개수
int quizNo = Integer.parseInt(stringTokenizer.nextToken()); // 퀴즈 개수
// 4. 부분합 배열 구해주기
long[] S = new long[suNo+1]; // S배열의 0번째 값을 무시하기 위해서 suNo+1로 배열의 개수 설정
// 혹시라도 수의 크기가 커서 int의 길이가 넘어가면 답이 잘못 나올 수 있기 떄문에 long으로 설정
// 5. 부분합 구하기
stringTokenizer = new StringTokenizer(bufferedReader.readLine()); // stringTokenizer를 for문 안으로 넣으면 안됨
for(int i =1; i<=suNo; i++){
S[i] = S[i-1] + Integer.parseInt(stringTokenizer.nextToken()); // S[1] = A[0]
}
// 6. 구간의 합 구하기
for(int q =0; q<quizNo; q++){
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int i = Integer.parseInt(stringTokenizer.nextToken()); // 구간 i부터
int j = Integer.parseInt(stringTokenizer.nextToken()); // 구간 j까지
System.out.println(S[j]-S[i-1]);
}
}
}
구간합 공식 기억해두기! (알고리즘 코딩테스트 문제풀이 java편 구간합)
S[i] = S[i-1] + A[i]
풀이 구상은 간단한데 코드를 짜면 간단하진 않았다. 자주 쓰는 코드는 손에 익도록 문제를 부지런히 풀어주자.