
https://www.acmicpc.net/problem/11659
접근
import java.util.*;
import java.io.*;
public class Solve11659 {
public static void main(String[] args) throws IOException{
Scanner sc = new Scanner(System.in);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//데이터의 개수, 질의 개수 입력
int dataCount = sc.nextInt();
int question = sc.nextInt();
//구간합 배열 생성 후, 정의
int sumData [] = new int [dataCount];
//구한 합을 구할 대상 배열 값 입력 (데이터 개수 만큼 반복)
int [] dataSet = new int[dataCount];
dataSet[0] = sc.nextInt();
sumData[0] = dataSet[0];
for(int i = 1 ; i< dataCount; i++){
dataSet[i] = sc.nextInt();
sumData[i] = sumData[i-1] + dataSet[i];
}
//질의 입력
for(int i = 0; i<question; i++){
int firstIdx = sc.nextInt();
int lastIdx = sc.nextInt();
//입력받은 구간합 구하고 출력.
if(firstIdx == 1)
bw.write(sumData[lastIdx-1] + "\n");
else
bw.write(sumData[lastIdx-1] - sumData[firstIdx-2] + "\n");
}
bw.flush();
bw.close();
}
}
개선 가능한 부분
입력을 받을때, Scanner 클래스 대신 BufferedReader 클래스를 사용하면 보다 더 효율적이다.
dataSet[] 배열은 없어져도 지장이 없고, sumData[] 배열만으로도 누적합 계산이 가능하다.
보통, 구간합은 sum[0] = 0으로 두고, sum[i] = sum[i-1] + data[i] 형식이 더 직관적이고 실수를 줄일 수 있는 방법이다.
'백준 > Java' 카테고리의 다른 글
| [JAVA] Map : 하나의 key에 여러 value를 저장하는 방법 (2) | 2025.08.12 |
|---|---|
| [JAVA] 슬라이딩 윈도우 알고리즘 (1) | 2025.08.11 |
| [JAVA] Map에서 value값에 대응하는 key값 찾는 방법? - 백준1620번 (0) | 2025.05.23 |
| [JAVA] O(1) 성능으로 집합을 다루기 (비트 마스크, 배열) - 백준 11723번 (0) | 2025.05.21 |
| [JAVA] 소수 구하기 - 에라토스테네스의 체 (0) | 2025.05.02 |