본문 바로가기

연습문제/JAVA

[백준 java] 10845 - 큐

바로 전 문제 스택과 거의 같은 문제이다.

스택에서는 그냥 스택을 사용하여 풀었는데 이번에는 직접 큐 처럼 동작하는 배열을 만들어서 구현했다.

 

큐는 선입선출이므로 먼저 들어온 값을 삭제한다. 여기서는 직접 삭제하지 않고 보여줄 부분을 변경 

우선 배열의 보여줄 부분 시작점 start , 끝점 last 으로 두고 

 

  1. push 시 배열의 last 인덱스에 추가후 last를 ++
  2. pop 에는 직접 삭제를 하지말고 큐의 last인덱스를 보여주고 보여줄 start를 ++한다.
  3. size 해당 큐의 크기는 last- start 이다 (배열을 직접 삭제하지않고 보여주는 부분만 바꿨기때문)
  4. empty start back 은 사이즈에 따라, 즉 last-start 이 0인지 아닌지에 출력을 바꿔준다.

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

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

public class B10845 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(bf.readLine());

        int[] queue = new int[10001];
        int start = 0;
        int last = 0;
        for(int i=0; i<N; i++){
            st = new StringTokenizer(bf.readLine(), " ");


            switch (st.nextToken()){
                case "push":{
                    queue[last] = Integer.parseInt(st.nextToken());
                    last++;
                    break;
                }
                case "pop":{
                    if(last-start==0) sb.append(-1).append('\n');
                    else {
                        sb.append(queue[start]).append('\n');
                        start++;
                    }
                    break;
                }
                case "size":{
                    sb.append(last-start).append('\n');
                    break;
                }
                case "empty":{
                    if(last-start == 0) sb.append(1).append('\n');
                    else sb.append(0).append('\n');
                    break;
                }
                case "front":{
                    if(last-start == 0) sb.append(-1).append('\n');
                    else sb.append(queue[start]).append('\n');
                    break;
                }
                case "back":{
                    if(last-start == 0) sb.append(-1).append('\n');
                    else sb.append(queue[last-1]).append('\n');
                    break;
                }
            }
        }
        System.out.println(sb);
    }
}