https://www.acmicpc.net/problem/10828
[문제 이해]
문제의 제목처럼 스택을 구현하는 문제였다. 실버 4라고는 하지만 스택만 안다면 충분히 풀 수 있는 문제라 금방 풀었던 것 같다!
[문제 풀이]
파이썬에서도 스택이나 큐를 사용하는 문제를 풀 때 deque를 사용했던 것처럼 자바에서도 deque를 사용하여 이 문제를 해결하였다.
deque는 linked list로 가져와서 사용했고, deque 라이브러리 내에 있는 add(), getLast(), removeLast() 등을 활용했다. 스택이니까 top이나 pop의 경우, 가장 마지막에 삽입된 원소를 찾기 위해 Last에서 꺼낼 수 있도록 해주었다. isEmpty()의 경우, boolean 값을 반환하기 때문에 if문에다가 바로 넣어서 만약 비어있으면 그대로 1을 출력하도록, 비어있지 않다면 0을 출력하도록 하였다.
입력 받을 때 push가 아니면 String 하나만 받게 되는데 이를 처리하기 위해 " " 즉, 빈칸을 포함하고 있으면 String 배열에 두 가지의 값을 저장할 수 있는 코드를 추가하였다.
import java.io.*;
import java.util.Deque;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Deque<Integer> deque = new LinkedList<>();
for(int i = 0; i< N; i++){
String str = br.readLine();
String[] str_arr = new String[2];
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
if(str.contains(" ")){
str_arr = str.split(" ");
str = str_arr[0];
}
if(str.equals("push")){
deque.add(Integer.parseInt(str_arr[1]));
}
else if(str.equals("top")){
if(deque.isEmpty()){
bw.write("-1");
}
else{
bw.write(String.valueOf(deque.getLast()));
}
bw.newLine();
}
else if(str.equals("size")){
bw.write(String.valueOf(deque.size()));
bw.newLine();
}
else if(str.equals("empty")){
if(deque.isEmpty()){
bw.write("1");
}
else{
bw.write("0");
}
bw.newLine();
}
else{
if(deque.isEmpty()){
bw.write("-1");
}
else{
bw.write(String.valueOf(deque.removeLast()));
}
bw.newLine();
}
bw.flush();
}
}
}
'코딩테스트 > 문제 풀이' 카테고리의 다른 글
[자바] 백준 10866번 덱 (2) | 2024.07.02 |
---|---|
[자바] 백준 1158번 요세푸스 문제 (0) | 2024.07.01 |
[파이썬] 백준 1654번 랜선 자르기 (0) | 2024.03.23 |
[파이썬] 백준 10814번 나이순 정렬 (0) | 2024.03.23 |
[파이썬] 백준 11870번 좌표 압축 (0) | 2024.03.20 |