https://www.acmicpc.net/problem/11659
11659번: 구간 합 구하기 4
첫째 줄에 수의 개수 N과 합을 구해야 하는 횟수 M이 주어진다. 둘째 줄에는 N개의 수가 주어진다. 수는 1,000보다 작거나 같은 자연수이다. 셋째 줄부터 M개의 줄에는 합을 구해야 하는 구간 i와 j
www.acmicpc.net
이 문제를 풀면서 알고리즘은 너무 쉬웠다.
구간합을 구하고 나서 계산만 하면 끝이라서...
하지만, 난관은 io 속도 있었다. 사용자의 input을 처리하기에 scanner는 너무 느렸다.
그래서 BufferedReader라는 객체를 사용해서 해야 했다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// int N과 M을 선언
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
기본적인 사용법은 이와 같다.
다만, 여기서 알아두면 좋은 점은 일단, BufferedReader는 enter를 기준으로 읽어들인다는 점.
그리고 그것을 parsing하기 위해서 stringTokenizer를 썼다는 점이다.
마지막으로 StringTokenizer를 다시 쓸라면 재선언 안하고 아래처럼 하면 된다.
st = new StringTokenizer(br.readLine());
전체 코드는 아래와 같다.
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// int N과 M을 선언
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
// sum[]을 선언
long[] sum = new long[N];
// input[]을 선언하고 값을 받는다.
int[] inputs = new int[N];
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < inputs.length ; i++){
inputs[i] = Integer.parseInt(st.nextToken());
if(i == 0){
sum[i] = inputs[i];
}
else{
sum[i] = sum[i-1] + inputs[i];
}
}
// sum을 계산
// for문에서 계산 값을 준다.
for(int i = 0 ; i < M ; i++){
st = new StringTokenizer(br.readLine());
int start = Integer.parseInt(st.nextToken());
int end = Integer.parseInt(st.nextToken());
if(start <= 1){
System.out.println(sum[end-1]);
}
else {
System.out.println(sum[end-1] - sum[start-2]);
}
}
}
}
'코딩 테스트' 카테고리의 다른 글
자바 개념 정리 (0) | 2023.03.11 |
---|---|
java 공부 정리 (0) | 2023.03.06 |
[프로그래머스] 옹알이(1) (0) | 2023.02.20 |
python 입력방식 (0) | 2022.10.05 |