코딩테스트/알고리즘 문제

[백준] 10845 큐 - Java

glorypang 2025. 4. 13. 22:44
728x90
반응형
SMALL

📌 문제 정보

  • 출처: 문제 링크
  • 난이도: ⭐ 
  • 문제 유형: Queue
  • 사용 언어: Java

🔍 문제 설명

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

명령은 총 여섯 가지이다.

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

💡 풀이 노트

Queue의 기본 메서드

메서드  설명  반환값 / 예외
`offer(E e)` 요소를 큐의 끝에 추가 성공 시 `true`, 실패 시 `false`
`poll()` 큐의 앞(front) 요소를 제거하고 반환 큐가 비어있으면 `null` 반환
`remove()` 큐의 앞 요소 제거 및 반환 큐가 비어있으면 예외 발생 (`NoSuchElementException`)
`peek()` 큐의 앞 요소를 제거하지 않고 반환 큐가 비어있으면 `null` 반환
`element()` 큐의 앞 요소 반환 (peek과 동일) 큐가 비어있으면 예외 발생
`isEmpty()` 큐가 비어있는지 확인 `true` 또는 `false`
`size()` 큐에 저장된 요소 개수 반환 `int`

🚀 코드 (Java)

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));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        Queue<Integer> q = new LinkedList<>();
        int last = -1;

        for(int i = 0 ; i < N ; i++) {
            st = new StringTokenizer(br.readLine());
            String s = st.nextToken();
            if(s.equals("push")){
                int n = Integer.parseInt(st.nextToken());
                q.offer(n);
                last = n;
            }
            else if(s.equals("pop")){
                if(!q.isEmpty()){
                    System.out.println(q.poll());
                }
                else{
                    System.out.println(-1);
                }
            }
            else if(s.equals("size")){
                System.out.println(q.size());
            }
            else if(s.equals("empty")){
               System.out.println(q.isEmpty() ? 1: 0);
            }
            else if(s.equals("front")){
                System.out.println(q.isEmpty() ? -1: q.peek());
            }
            else if(s.equals("back")){
                System.out.println(q.isEmpty() ? -1: last);
            }
        }
    }
}

🖥 실행 결과

입력
15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

 

출력
1
2
2
0
1
2
-1
0
1
-1
0
3

 


🔄 개선 가능성

📌 깃허브 코드 저장소: https://github.com/glorypang/CodingTest

 

 

 

728x90
반응형
LIST