Notice
Recent Posts
Recent Comments
Link
개발 공부~
[백준 - 11659] 구간 합 구하기 4. java 본문
https://www.acmicpc.net/problem/11659
Ex
Solution
BufferedReader를 사용하는 이유
- BufferedReader의 readLine() 메서드는 한 줄씩 읽어오는 데 적합
StringTokenizer를 사용하는 이유
- BufferedReader로 읽어온 한 줄의 문자열을 공백이나 다른 구분자로 분리하여 토큰으로 분리함
- 각 토큰을 쉽게 접근할 수 있으며, nextToken() 메서드를 사용하여 순차적으로 값 접근 가능
- BufferedReader를 사용하여 입력을 빠르게 읽고, StringTokenizer를 사용하여 읽어온 입력을 분리함으로써 효율적이고 편리하게 입력을 처리할 수 있음.
왜 throws IOException 을 사용하는가?
- BufferedReader의 readLine 메서드는 입력을 읽을 때 IOException의 발생가능성이 있음. 이를 처리하지 않으면 컴파일 오류가 발생함
- 메서드 선언부에 throws IOException 추가 -> 현재 메서드에서 예외를 처리하지 않고, 호출한 메서드로 예외를 전달
BufferedReader와 StringTokenizer를 사용했다.
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 br = new BufferedReader(new InputStreamReader(System.in));
//첫 번째 줄 입력을 읽고 StringTokenizer로 공백을 기준으로 분리
StringTokenizer st = new StringTokenizer(br.readLine());
// 첫 번째 토큰을 정수로 변환하여 저장 (시험 본 과목의 개수)
int su = Integer.parseInt(st.nextToken());
//// 두 번째 토큰을 정수로 변환하여 저장 (구간 합을 계산할 쿼리의 수)
int q = Integer.parseInt(st.nextToken());
//누적 합을 저장할 배열 생성
long[] nums = new long[su+1];
//두 번째 줄 입력을 읽고 StringTokenizer로 공백을 기준으로 분리
st = new StringTokenizer(br.readLine());
// 1부터 과목 개수까지 반복하면서 누적 합 계산해 저장
for (int i = 1; i <= su; i++) {
nums[i] = nums[i-1] + Integer.parseInt(st.nextToken());
}
for(int j = 0; j < q; j++) {
//// 각 쿼리 줄을 읽고 StringTokenizer로 공백을 기준으로 분리
st = new StringTokenizer(br.readLine());
int n1= Integer.parseInt(st.nextToken());
int n2= Integer.parseInt(st.nextToken());
System.out.println(nums[n2]-nums[n1-1]);
}
}
}
참고
여기서 왜 StringTokenizer와 BufferedReader를 사용해야하는지 궁금해 찾아보았다.
[Java] StringTokenizer와 Split() 메서드 언제 써야할까?
우선 StringTokenizer에 대해 알아보자. java.util.StringTokenizer 클래스란? 긴 문자열을 지정된 구분자(delimiter)를 기준으로 토큰(token)이라는 여러 개의 문자열로 잘라내는 데 사용된다. 예) “100,200,300,4
velog.io
Scanner보다 빠른 입력 BufferedReader, StringTokenizer
알고리즘 문제를 풀 때 입출력을 좀 더 빠르게 해야 할 경우가 생깁니다. 그중 오늘은 입력 클래스를 정리하려 합니다. 저는 원래 쓰기 간편한 Scanner를 주로 이용하였었는데요, 같은 문제를 풀었
lealea.tistory.com
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 - 10986] 나머지 합 .java (feat.모듈러 연산) (0) | 2024.07.10 |
---|---|
[백준-11660] 구간 합 구하기 2 .java (0) | 2024.07.09 |
[백준 1546] 평균.java (0) | 2024.07.02 |
[백준 11720] 숫자의 합 .java (0) | 2024.07.02 |
[백준 18352] 특정 거리의 도시 찾기.py (0) | 2024.07.02 |