본문 바로가기
코딩테스트/문제 풀이

[자바] 백준 10866번 덱

by 왕자두 2024. 7. 2.

https://www.acmicpc.net/problem/10866

 

 

[문제 이해]

덱을 얼마나 잘 이해하고 있는가에 대한 문제였다.. -> 당연히 금방 풀 줄 알았는데 덱을 제대로 이해 못하고 있었나봄 ㅎㅎ;;

 

[문제 풀이]

단순히 equals로 문자 비교해서 관련된 내용 구현하면 된다고 생각하고 풀었는데... 시간 초과~..

아무튼 해보니까 get 대신 peek을 쓰는 것이 값을 조회할 때 시간이 덜 걸리는 것 같고,, add보단 offer을 사용하는 것이 시간이 덜 걸리는 것 같다. 그리고 equals로 다 검사해도 괜찮긴 하지만 switch문을 사용해서 구현해보는 방식으로 문제를 풀어봤다.

마지막으로 BufferedWriter 초기화하는 거 때문에도 계속 틀렸었는데 flush랑 close는 for문 밖에서 해주면 된다. close()로 버퍼 닫는 거는 밖에서 제대로 해줬는데 flush()가 이상한 위치에 들어가 있었다 ..

 

import java.io.*;
import java.util.*;

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));
        StringTokenizer st;

        Deque<Integer> deque = new LinkedList<>();
        int N = Integer.parseInt(br.readLine());

        for(int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            switch (st.nextToken()){
                case "push_back":
                    deque.offerLast(Integer.parseInt(st.nextToken()));
                    break;
                case "push_front":
                    deque.offerFirst(Integer.parseInt(st.nextToken()));
                    break;
                case "front":
                    if (deque.isEmpty()) {
                        bw.write("-1");
                    } else {
                        bw.write(String.valueOf(deque.peekFirst()));
                    }
                    bw.newLine();
                    break;
                case "back":
                    if (deque.isEmpty()) {
                        bw.write("-1");
                    } else {
                        bw.write(String.valueOf(deque.peekLast()));
                    }
                    bw.newLine();
                    break;
                case "size":
                    bw.write(String.valueOf(deque.size()));
                    bw.newLine();
                    break;
                case "empty":
                    if(deque.isEmpty()){
                        bw.write("1");
                    }
                    else {
                        bw.write("0");
                    }
                    bw.newLine();
                    break;
                case "pop_front":
                    if(deque.isEmpty()){
                        bw.write("-1");
                    }
                    else {
                        bw.write(String.valueOf(deque.pollFirst()));
                    }
                    bw.newLine();
                    break;
                case "pop_back":
                    if(deque.isEmpty()){
                        bw.write("-1");
                    }
                    else {
                        bw.write(String.valueOf(deque.pollLast()));
                    }
                    bw.newLine();
                    break;
            }
        }
        bw.flush();
        bw.close();
    }
}