
- 간단하게 Stack을 사용하는 문제라고 생각했는데 시간초과가 떴다. Scanner 안쓰고 Buffer 쓰면 안나는 줄 알았는데 아닌가보다..
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());
Stack<Integer> stack = new Stack<>();
int temp = 0;
temp = parseInt(st.nextToken());
for(int i = 0; i < temp; i++){
st = new StringTokenizer(br.readLine());
int method = parseInt(st.nextToken());
switch(method){
case 1:
int num = parseInt(st.nextToken());
stack.push(num);
break;
case 2:
if(stack.isEmpty()){
System.out.println(-1);
break;
}
System.out.println(stack.pop());
break;
case 3:
System.out.println(stack.size());
break;
case 4:
if(stack.isEmpty()){
System.out.println(1);
break;
}
System.out.println(0);
break;
case 5:
if(stack.isEmpty()) {
System.out.println(-1);
break;
}
System.out.println(stack.peek());
break;
}
}
}
}
- 찾아보니 System.out.println()보다 StringBuilder를 쓰는게 연산 수를 줄여줄 수 있다고한다.
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());
StringBuilder sb = new StringBuilder();
Stack<Integer> stack = new Stack<>();
int temp = 0;
temp = parseInt(st.nextToken());
for(int i = 0; i < temp; i++){
st = new StringTokenizer(br.readLine());
int method = parseInt(st.nextToken());
switch(method){
case 1:
int num = parseInt(st.nextToken());
stack.push(num);
break;
case 2:
if(stack.isEmpty()){
sb.append(-1).append('\n');
break;
}
sb.append(stack.pop()).append('\n');
break;
case 3:
sb.append(stack.size()).append('\n');
break;
case 4:
if(stack.isEmpty()){
sb.append(1).append('\n');
break;
}
sb.append(0).append('\n');
break;
case 5:
if(stack.isEmpty()) {
sb.append(-1).append('\n');
break;
}
sb.append(stack.peek()).append('\n');
break;
}
}
System.out.println(sb);
}
}

- 생각보다 신경써야하는 부분이 많은 것 같다... System.out.println()도 연산횟수에 포함된다는 사실을 간과했다. 이젠 StringBuilder의 사용을 지향해야겠다.
StringBuilder
- String과 비슷하게 메소드에서 index를 이용한다. 그리고 추가하는 타입을 생각보다 많이 지원해준다. String, int, char등 다 지원해주는 듯.
StringBuilder sb = new StringBuilder();
sb.append(T t);
sb.insert(int index, T t);
sb.substring();
sb.deleteCharAt(int index);
sb.toString();
sb.length();
sb.reverse();
sb.setChar(int index, T t);
sb.setLength(int length);