백준 10866 - 자료구조

·2025년 8월 3일
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));
        StringBuilder sb = new StringBuilder(); // 출력 모아쓰기
        int N = Integer.parseInt(br.readLine());

        Deque<Integer> deque = new ArrayDeque<>();

        for (int i = 0; i < N; i++) {
            String s = br.readLine();
            if (s.contains("push_front")) {
                inat num = Integer.parseInt(s.split(" ")[1]);
                deque.addFirst(num);
            } else if (s.contains("push_back")) {
                int num = Integer.parseInt(s.split(" ")[1]);
                deque.addLast(num);
            } else if (s.equals("pop_front")) {
                sb.append(deque.isEmpty() ? -1 : deque.removeFirst()).append("\n");
            } else if (s.equals("pop_back")) {
                sb.append(deque.isEmpty() ? -1 : deque.removeLast()).append("\n");
            } else if (s.equals("size")) {
                sb.append(deque.size()).append("\n");
            } else if (s.equals("empty")) {
                sb.append(deque.isEmpty() ? 1 : 0).append("\n");
            } else if (s.equals("front")) {
                sb.append(deque.isEmpty() ? -1 : deque.getFirst()).append("\n");
            } else if (s.equals("back")) {
                sb.append(deque.isEmpty() ? -1 : deque.getLast()).append("\n");
            }
        }

        System.out.print(sb);
    }
}

풀이과정 및 리뷰

ArrayDeque 구현체를 이용해 덱 구현

removeFirstpollFirst 의 차이 && getFirstpeekFirst 의 차이

  • 수행 연산은 같으나, 반환값이 다름
  • remove/ get: 덱이 빈 경우 NoSuchElementException 발생 → if-elsedeq.isEmpty() 인 경우의 로직 처리가 되어 있다면 상관없지만, 지금처럼 sb.append 내부에서 삼항 연산이 이루어지는 경우 반환 타입이 달라짐 -1 || StringBuilder → 백준 문제에서 오류나지는 않았음
  • poll / peek: 덱이 빈 경우 null 반환

결론 : null-safe 인 메서드 peek , poll 을 사용하자.

(추가)

앞 / 뒤에 요소 추가 offer

  • add / push : 예외발생
  • offer : false 반환, 예외 발생 안함

앞 / 뒤 요소 제거 후 반환 poll

  • remove : 예외발생
  • poll : null 반환

앞 / 뒤 요소 확인(제거 X) peek

  • get : 예외발생
  • peek : null 반환

0개의 댓글