728x90
관련 키워드 #누적합.
제출 코드
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());
int suNo = Integer.parseInt(stringTokenizer.nextToken());
int quizNo = Integer.parseInt(stringTokenizer.nextToken());
long[] S = new long[suNo + 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());
int j = Integer.parseInt(stringTokenizer.nextToken());
System.out.println(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));
- Scanner 보다 BufferedReader 가 더 빠르게 처리하기에 선택.
- import java.io 는 i / o 패키지이다. 자세한 내용은 따로 글을 만들어서 서술 예정.
StringTokenizer stringTokenizer
= new StringTokenizer(bufferedReader.readLine());
int suNo = Integer.parseInt(stringTokenizer.nextToken());
int quizNo = Integer.parseInt(stringTokenizer.nextToken());
long[] S = new long[suNo + 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());
int j = Integer.parseInt(stringTokenizer.nextToken());
System.out.println(S[j] - S[i - 1]);
}
}
}
- int형 대신 StringTokenizer stringTokenizer 사용.
- int suNo, int quizNo 로 숫자 개수와 질의 개수에 대한 변수 각각 저장.
- long형 에서 suNo + 1 은 0번째 배열 대신 1번째 배열로 바꿔서 첫번째 for문의 범위를 1부터 suNo 까지로 설정한다.
- 첫번째 for문을 통해 합 배열 생성하기.
- 두번째 for문 : 질의 개수만큼 반복하고, 질의 범위를 받아 ( i ~ j ) 구간 합 출력한다.
- int i = ~~~ , int j = ~~~ 로 질의 범위에 대한 데이터를 받아온다.
- 마지막으로 구간 합을 출력하며 끝.
컴파일 에러의 이유.
1. 오타. - 코드가 길어서 오타가 많았다.
2. import java.io 패키지에 대한 이해도 부족
추후에 io패키지에 대해 학습 후 블로그에 올릴 예정이다. 무작정 import java.util 를 쓰면 안되겠다.
728x90
'코딩테스트 연습 > 백준_코딩테스트연습' 카테고리의 다른 글
백준 11660번. 구간 합 구하기 2 (Java) (0) | 2023.06.07 |
---|---|
백준 1546번. 평균 (Java) (0) | 2023.06.06 |
백준 11720번. 숫자의 합 (Java) (0) | 2023.06.06 |