728x90
1. 풀이
1) java.util.Stack 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;
import java.util.StringTokenizer;
public class BOJ_10828_스택 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine());
Stack<Integer> stack = new Stack<>();
StringBuilder sb = new StringBuilder();
StringTokenizer st;
while(N-->0){
st = new StringTokenizer(in.readLine());
switch(st.nextToken()){
case "pop":
if(!stack.empty()) sb.append(stack.pop());
else sb.append(-1);
sb.append("\n");
break;
case "size":
sb.append(stack.size()).append("\n");
break;
case "empty":
if(stack.empty()) sb.append(1);
else sb.append(0);
sb.append("\n");
break;
case "top":
if(!stack.empty()) sb.append(stack.peek());
else sb.append(-1);
sb.append("\n");
break;
default:
stack.push(Integer.parseInt(st.nextToken()));
break;
}
}
System.out.println(sb);
}
}
2) 배열 사용
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_10828_스택 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine());
int[] stack = new int[10001];
int top = -1;
StringBuilder sb = new StringBuilder();
StringTokenizer st;
while(N-->0){
st = new StringTokenizer(in.readLine());
switch(st.nextToken()){
case "pop":
if(top==-1) sb.append("-1\n");
else sb.append(stack[top--]).append("\n");
break;
case "size":
sb.append(top+1).append("\n");
break;
case "empty":
if(top==-1) sb.append("1\n");
else sb.append("0\n");
break;
case "top":
if(top==-1) sb.append("-1\n");
else sb.append(stack[top]).append("\n");
break;
default:
stack[++top] = Integer.parseInt(st.nextToken());
break;
}
}
System.out.print(sb);
}
}
2. 결과
배열을 사용하는 방식이 API보다 시간, 메모리면에서 더 빨랐다.
API를 사용하면 함수 호출을 여러번 하게되는데 그 차이가 아닐까 싶다.
실제 Stack.java를 살펴보면 내가 배열로 짠 방식과 비슷하게 구현돼있다. 다른 점은 스택 스스로 길이를 늘리는 것, pop한 뒤 null로 그 자리를 채우는 것인데, 이 문제에서는 필요 없을 것 같아 추가하지 않았다.
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 17298 오큰수 - JAVA (0) | 2022.02.05 |
---|---|
[BOJ] 1874 스택수열 - JAVA (0) | 2022.02.05 |
[BOJ] 4949 균형잡힌 세상 - JAVA (0) | 2022.02.05 |
[BOJ] 9012 괄호 - JAVA (0) | 2022.02.05 |
[BOJ] 10772 제로 - JAVA (0) | 2022.02.05 |
댓글