본문 바로가기

JAVA/백준

백준 10845번: 큐

728x90
반응형

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

 

10845번: 큐

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

www.acmicpc.net

정수를 저장하고 6개의 명령을 수행하는 큐를 구현하는 문제이다. 구현해야하는 명령은 다음과 같다.

1. push X: X를 큐에 저장한다.

2. pop: 가장 앞에 있는 정수를 삭제하고 출력한다. 만약 큐가 비었다면 -1을 출력한다.

3. size: 큐에 들어 있는 정수의 개수를 출력한다.

4. empty: 큐가 비어있다면 1 아니라면 0을 출력한다.

5. front: 가장 앞에 있는 정수를 출력한다. 만약 큐가 비어있다면 -1을 출력한다.

6. back: 가장 뒤에 있는 정수를 출력한다. 만약 큐가 비어있다면 -1을 출력한다.

 

일단, 기본적인 토대는 저번에 푼 스택 문제에서 사용한 코드에서 가져왔다.

https://pseudo-note.tistory.com/23

 

백준 10828번: 스택

정수를 저장하는 스택을 다음 5가지 명령을 처리할 수 있게 만드는 문제이다 1. push X: 정수 X를 스택에 추가한다. 2. pop: 스택 가장 위의 정수를 제거하고, 그 값을 출력한다. 만약, 스택이 비어있

pseudo-note.tistory.com

세부적인 사항을 큐에 맞게 바꾸고 나니 back을 제외한 다른 코드가 완성되었다.

우선, 큐 자체에 back처럼 맨 뒤에 요소를 반환하는 메소드가 있나 찾아봤는데 찾지 못했고,

다음으로 큐가 LinkedList로 구현되니까 LinkedList에 get메소드를 사용할 수 있지 않을까 생각했는데

그것도 되지 않았다.

그러고보니 맨 뒤에 저장된 수는 가장 마지막에 push로 입력된 수 일것이고, 

그렇다면 push에서 입력받은 수를 저장해주는 변수를 만들어주면 간단하게 back을 구현할 수 있음을 깨달았다.

아래는 그렇게 하여 완성된 코드이다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
import java.util.Queue;
import java.util.LinkedList;

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));
    int N = Integer.parseInt(br.readLine());
    Queue<Integer> queue = new LinkedList<>();
    int bf = -1;

    for (int i = 0; i < N; i++) {
      StringTokenizer st = new StringTokenizer(br.readLine());
      switch (st.nextToken()) {
        case "push": 
          bf = Integer.parseInt(st.nextToken());
          queue.offer(bf);
          break;
        case "pop": 
          if ( !queue.isEmpty() ) bw.write(queue.remove() + "\n");
          else bw.write("-1\n");
          break;
        case "front": 
          if ( !queue.isEmpty() ) bw.write(queue.peek() + "\n");
          else bw.write("-1\n");
          break;
        case "back":
            if ( !queue.isEmpty() ) bw.write(bf + "\n");
            else bw.write("-1\n");
            break;
        case "empty": 
          if (queue.isEmpty()) bw.write("1\n");
          else bw.write("0\n");
          break;
        default: //size
         bw.write(queue.size() + "\n");
         break;
      }
    }
    br.close();
    bw.flush();
    bw.close();
  }
}

 

반응형

'JAVA > 백준' 카테고리의 다른 글

백준 18110번: solved.ac  (0) 2024.04.16
백준 10866번: 덱  (0) 2024.04.15
백준 10828번: 스택  (0) 2024.04.13
백준 10816번: 숫자 카드 2  (0) 2024.04.12
백준 10773번: 제로  (0) 2024.04.11