코딩테스트/[JAVA] 백준
[백준 | JAVA | 11659번] 구간합 구하기
냠냠쿠
2023. 11. 5. 10:06
728x90
https://www.acmicpc.net/problem/11659
📝 유튜브 풀이
https://www.youtube.com/watch?v=JSfXW7UJ04Y&list=PLFgS-xIWwNVU_qgeg7wz_aMCk22YppiC6&index=3
- N개의 수를 입력 받음과 동시에 합 배열을 생성
S[i] = S[i-1] + A[i] - 구간 i~j가 주어지면 구간 합을 구하는 공식으로 정답을 출력
S[j] - S[i-1]
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{
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
//bufferedReader.readLine()을 받는 것은 예제 첫번째 줄을 읽어왔다는 것.
int suNo = Integer.parseInt(stringTokenizer.nextToken());
//숫자의 개수
int quizNo = Integer.parseInt(stringTokenizer.nextToken());
// 질의의 개수
long[] S = new long[suNo+1];
// 덧셈이나 곱셈이 많을 때 int형으로 선언 시 오류가 날 수 있기 때문에 습관적으로 long형을 선언하는 것이 좋음
// suNo+1 을 한 이유는 배열은 인덱스 0 번을 무시하고 1번부터 사용할 것이기 때문
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
for(int i=1; i<=suNo; 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());
//첫 번째 나오는 숫자를 i로 가져온다.
int j = Integer.parseInt(stringTokenizer.nextToken());
//두 번째 나오는 숫자를 j로 가져온다.
System.out.println(S[j]-S[i-1]);
}
}
}
- 받는 데이터가 많을 때에는 scanner보다 bufferedReader를 쓰는것이 더 좋다.
한줄에 길게 데이터를 받을 때에는 int보다 토큰으로 분리하여 사용하는 것이 좋다.
📝 나의 풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//숫자 개수
int N = scanner.nextInt();
//합을 구해야 하는 횟수
int M = scanner.nextInt();
int[] arr = new int[N+1];
//구간합 구하기
for(int i=1; i<=N; i++) {
arr[i] = arr[i-1]+scanner.nextInt();
}
for(int i=0; i<M; i++) {
int a = scanner.nextInt();
int b = scanner.nextInt();
System.out.println(arr[b]-arr[a-1]);
}
}
}
728x90