(Java) 백준 18258번 - 큐 2

코딩너구리·2026년 2월 7일

코딩 문제 풀이

목록 보기
206/266

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

문제

> 정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
> 명령은 총 여섯 가지이다.

push X: 정수 X를 큐에 넣는 연산이다.
pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 큐에 들어있는 정수의 개수를 출력한다.
empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

접근

큐를 이용해 문제에 주어진 기능을 큐의 기능을 사용하여 구현한다. back의 기능의 구현을 위해 queue가 아닌 Deque를 사용하여 접근한다.

문제해결

> 명령어의 개수 N을 입력받고 while문으로 명령어를 받는다.
> cmd로 명령어를 받고 명령어에 따라 값이 필요하면 x에 받아준다.
> switch문으로 명령어에 따라 기능을 나눠준다.
> push는 큐의 삽입기능을 사용해 x를 넣어준다.
> pop은 isEmpty로 큐를 확인하고 원소가 있으면 poll로 제거, 없으면 -1을 출력한다.
> size는 q.size()로 출력, empty도 isEmpty()로 있으면 1 없으면 0을 출력한다.
> front와 back도 isEmpty로 원소가 있는지 확인하고 각각 peek와 getLast로 앞 뒤에 접근해 출력한다.

코드

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

public class Main {
    //18258번 큐2
    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> q = new LinkedList<>();

        while(N--> 0) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String cmd = st.nextToken();
            int x = 0;
            if(st.hasMoreTokens()) x = Integer.parseInt(st.nextToken());
            switch(cmd) {
                case "push" :
                    q.offer(x);
                    break;

                case "pop" :
                    if(q.isEmpty()) sb.append(-1).append('\n');
                    else sb.append(q.poll()).append('\n');
                    break;

                case "size" :
                    sb.append(q.size()).append('\n');
                    break;

                case "empty" :
                    if(q.isEmpty()) sb.append(1).append('\n');
                    else sb.append(0).append('\n');
                    break;

                case "front" :
                    if(q.isEmpty()) sb.append(-1).append('\n');
                    else sb.append(q.getFirst()).append('\n');
                    break;

                case "back" :
                    if(q.isEmpty()) sb.append(-1).append('\n');
                    else sb.append(q.getLast()).append('\n');
            }
        }
        System.out.print(sb);
    }
}

후기

그냥 queue로 하려고 헀는데 back때문에 deque를 사용했다

0개의 댓글