StringTokenizer를 통해 문자열을 쪼갤 수 있다.
// 기본 delimiter로 분리 \t \n \r
StringTokenizer st1 = new StringTokenizer(line);
// " " 를 기준으로 분리
StringTokenizer st2 = new StringTokenizer(line," ");
// " " 까지 분리된 결과에 포함함
StringTokenizer st3 = new StringTokenizer(line," ", true);
3가지 생성자가 있다.
첫번째 인자만 전달할 경우 인자를 기본 delim에 의해 분리한다.
두번째 인자로 delim을 전달할 경우 해당 delim에 의해 분리한다.
세번째 인자로 boolean 값을 전달해서 delim을 분리된 결과에 포함할 지 정할 수 있다
while(st1.hasMoreTokens()){
System.out.println(st1.nextToken());
}
countTokens
: 토큰의 개수를 반환한다
hasMoreTokens
: 다음의 토큰이 있는지 boolean을 반환한다
nextToken
: 다음의 토큰을 String으로 반환한다
import java.io.*;
import java.util.*;
public class Main{
static int front = -1;
static int rear = -1;
static int[] q = new int[2000000];
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int count = Integer.parseInt(br.readLine());
BufferedWriter bf = new BufferedWriter(new OutputStreamWriter(System.out));
for (int i=0; i<count; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
switch (st.nextToken()) {
case "push":
push(Integer.parseInt(st.nextToken()));
break;
case "pop" :
bf.write(String.valueOf(pop()));
bf.write("\n");
break;
case "size":
bf.write(String.valueOf(size()));
bf.write("\n");
break;
case "empty":
bf.write(String.valueOf(empty()));
bf.write("\n");
break;
case "front":
bf.write(String.valueOf(front()));
bf.write("\n");
break;
case "back":
bf.write(String.valueOf(back()));
bf.write("\n");
break;
}
}
bf.flush();
bf.close();
}
public static void push(int input){
q[++rear] = input;
}
public static int pop(){
if (empty()==1) return -1;
return q[++front];
}
public static int size(){
return rear-front;
}
public static int empty(){
if (size()==0){
return 1;
} else {
return 0;
}
}
public static int front(){
if (empty()==1){
return -1;
} else {
return q[front+1];
}
}
public static int back(){
if (empty()==1){
return -1;
} else {
return q[rear];
}
}
}
활용 문제
Queue를 구현하는 문제인데, 입출력 시간 제한이 꽤 타이트하다.
따라서 빠른 입력을 위해 Scanner가 아닌 BufferedReader를 사용하면 readLine
을 통해\n
을 기준으로 입력받게 된다
이 때 중간의 공백이 있는 경우 문자열을 쪼개기 위해 StringTokenizer를 사용해 줬다.