TIL
TIL 2024-03-01 간단한 BufferedReader 와 StringTokenizer 사용법
wonow_
2024. 3. 1. 20:29
백준에서 BufferedReader와 StringTokenizer를 사용하라는데 어떻게 사용할지 몰라서 애먹었었다.
둘을 왜 사용하는지는 다음에 설명
내가 우선 Token의 개념을 몰랐음
Token
공백 (띄어쓰기, 개행, 탭) 등으로 구분되는 요소
안녕 하세 요 라고 하면 1. 안녕 2. 하세 3. 요 이렇게 구분 된다.
readLine() 하고 nextToken()? 뭐지? 했었는데 Token의 개념을 알면 이해된다.
"안녕 하세 요" 를 받고 nextToken()을 하면 "안녕" 이나오고 한번 더 하면 "하세" 가 나오는 것
https://www.acmicpc.net/problem/11659
여기 문제를 보면
이렇게 나오는데
5 3 을 N과 M에 저장하고
5 4 3 2 1 을 배열에 순서대로 저장
이후 1 3 / 2 4 / 5 5 를 저장해서 자유껏 풀면된다.
아아 이해된다~~
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 = new StringTokenizer(br.readLine());
// 수의 갯수 N / 합을 구해야 하는 횟수 M
int N = Integer.parseInt(stringTokenizer.nextToken());
int M = Integer.parseInt(stringTokenizer.nextToken());
int[] NArr = new int[N + 1];
// 2번째는 N 개의 수가 주어진다.
stringTokenizer = new StringTokenizer(br.readLine());
for(int i = 1; i <= N; i++) {
NArr[i] = NArr[i-1] + Integer.parseInt(stringTokenizer.nextToken());
}
// M개의 합을 구해야 하는 i와 j -> i 부터 j 까지 구해라
for(int q = 0; q < M; q++) {
stringTokenizer = new StringTokenizer(br.readLine());
int i = Integer.parseInt(stringTokenizer.nextToken());
int j = Integer.parseInt(stringTokenizer.nextToken());
System.out.println(NArr[j]-NArr[i - 1]);
}
}
}
이렇게 풀었음!
readLine()으로 값 입력 받고 nextToken으로 값들 변수에 저장해서 자유롭게 사용하면된다.
bufferdReader는 데이터를 파싱하지 않고 문자열 그대로 들고 오기 때문에 형변환을 해줘야 한다.