public class Main {
static final StreamTokenizer st
= new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
static int N;
static ArrayList<Integer>[] g;
static int read() throws Exception {
st.nextToken();
return (int) st.nval;
}
public static void main(String[] args) throws Exception{
N= read();
g = new ArrayList[N+1];
for(int i = 1; i<=N; i++)
g[i] = new ArrayList<>();
int M = N-1;
while(M-->0){
int u = read();
int v = read();
g[u].add(v);
g[v].add(u);
}
}
}
설명
원래 BufferedReader + InputStreamReader를 썼었는데 BufferedReader를 생성값으로 받는
StreamTokenizer라는게 있었다.
말하자면 입력 스트림 자체를 토큰화해서 read하는건데
Reader r = new BufferedReader(new InputStreamReader(is));
StreamTokenizer st = new StreamTokenizer(r);
return (int) st.nval;
이런식으로 쓴다.
nval말고 sval도 있는거 보면 이건 string value인듯 싶다.
Modifier and Type
| 자료형 | 필드명 | 설명 |
| double | nval | 현재 토큰이 숫자인 경우 이 필드에는 해당 숫자의 값이 포함된다 |
| String | sval | 현재 토큰이 단어 토큰인 경우 이 필드에는 단어 토큰의 문자를 제공하는 문자열이 포함된다. |
공식 문서에 기재된 StreamTokenizer의 설명이다.
참고 : https://docs.oracle.com/javase/8/docs/api/java/io/StreamTokenizer.html
'공부 > 알고리즘' 카테고리의 다른 글
| [코드트리] 3 - DP, LIS, 부분 합 DP 복습, 북마크 활용 (0) | 2026.05.27 |
|---|---|
| [코드트리] 2 - 트리 공부 및 1일 1문제 습관 형성하기 (0) | 2026.05.20 |
| 코드트리 - 슬라이딩 윈도, 누적합, prefix max 기법, 최적화 (0) | 2026.05.12 |
| 코드트리 - 구현, 완전탐색, 최적화 (0) | 2026.05.11 |
| 코드트리 - 완전탐색, 문자열, 기본 (0) | 2026.05.10 |