Study/Problem Solving

[BOJ_10866] 덱

monitor 2023. 10. 21. 15:20

설명


사실 이 풀이는 좋은 풀이법은 아니다. 아예 API를 쓸 거면 Deque를 사용하면 되는데 이상하게 List를 사용해서 풀었기 때문이다. 아니면 아예 int[]로 직접 구현해서 푸는 것도 자료구조를 익히는데 좋은 방법이 될 것 같다.

 

 

코드


package Data_Structure;

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

public class BOJ_10866 {
    public static void main(String[] args) throws Exception{
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tk  = new StringTokenizer(in.readLine()," ");
        int N = Integer.parseInt(tk.nextToken());
        List<Integer> list = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < N; i++){
            tk  = new StringTokenizer(in.readLine()," ");
            String str = tk.nextToken();
            if("push_front".equals(str)){
                list.add(0,Integer.parseInt(tk.nextToken()));
            }
            if("push_back".equals(str)){
                list.add(Integer.parseInt(tk.nextToken()));
            }
            if("pop_front".equals(str)){
                if(list.size() > 0) {
                    sb.append(list.get(0) + "\n");
                    list.remove(0);
                }else{
                    sb.append(-1 + "\n");
                }
            }
            if("pop_back".equals(str)){
                if(list.size() > 0) {
                    sb.append(list.get(list.size() - 1) + "\n");
                    list.remove(list.size() - 1);
                }else{
                    sb.append(-1 + "\n");
                }
            }
            if("size".equals(str)){
                sb.append(list.size() + "\n");
            }
            if("front".equals(str)){
                if(list.size() > 0) {
                    sb.append(list.get(0) + "\n");
                }else{
                    sb.append(-1 + "\n");
                }
            }
            if("back".equals(str)){
                if(list.size() > 0) {
                    sb.append(list.get(list.size() - 1) + "\n");
                }else{
                    sb.append(-1 + "\n");
                }
            }
            if("empty".equals(str)){
                if(list.size() == 0){
                    sb.append(1 + "\n");
                }else{
                    sb.append(0 + "\n");
                }
            }
        }
        System.out.print(sb.toString());
    }
}
 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net