스택을 구현해보는 문제이다. 스택의 특징이라면 후입선출(Last In First Out)
배열로 구현을 해도 괜찮겠지만
자바의 linked list를 이용하면 deque은 물론 stack도 구현이 가능하기 때문에 연습해볼겸 linked list를 사용해보았다.
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int n = Integer.parseInt(br.readLine());
LinkedList<Integer> stack = new LinkedList<>();
while(n-- > 0){
st = new StringTokenizer(br.readLine()," ");
switch(st.nextToken()){
case "push":
stack.addFirst(Integer.parseInt(st.nextToken()));
break;
case "pop":
Integer a = stack.pollFirst();
if(a==null){
a = -1;
}
sb.append(a).append("\n");
break;
case "size":
sb.append(stack.size()).append("\n");
break;
case "empty":
if(stack.isEmpty()) {
sb.append(1).append("\n");
}
else {
sb.append(0).append("\n");
}
break;
case "top":
Integer b = stack.peekFirst();
if(b==null){
b = -1;
}
sb.append(b).append("\n");
break;
}
}
bw.write(sb.toString());
br.close();
bw.flush();
bw.close();
}
}
코드는 다음과 같다.
처음 한 번은 오답을 제출하였는데 그 이유는 linkedList의 메소드 add() 때문이다.
Linked List는 deque인터페이스를 구현하고 있기 때문에 양쪽 끝에서 요소를 삽입하거나 삭제가 가능하다.
add()를 당연히 앞에서 삽입을 하고 있을거라 생각하고 있었지만
사실 add()는 끝에서 삽입을 하는 메소드 였다.
그래서 addFrist()메소드로 삽입을 해야 peekFirst() , pollFirst()의 반환 값으로 맨 마지막에 삽입한 데이터가 나오는 것이다.
그리고 stringBuilder 타입은
버퍼라이트로 출력을 못하므로 String으로 변환 해주어야 했다.
'Algorithm' 카테고리의 다른 글
백준 13023번, ABCDE - (Java, DFS) (0) | 2024.04.17 |
---|---|
백준 2309번 일곱난쟁이-(Java,브루트포스) (0) | 2024.04.16 |
백준 10989번 - (Java, 계수정렬) (0) | 2024.04.06 |
백준 2751번 - 수 정렬하기 2 (Java,병합정렬) (0) | 2024.03.24 |
백준 7795번 - 먹을 것인가 먹힐 것인가 [Java] (0) | 2024.03.24 |