백준 10845

2018-10-11

백준 10845 - 큐

img

img

package ex;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
// 한번 지나간건 돌아오지 않음. 
//  push  시 커서값으로 변수하나 줘야함 
// 
/*
 * 
push X: 정수 X를 큐에 넣는 연산이다.
pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 큐에 들어있는 정수의 개수를 출력한다.
empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
 */
public class BaeJoon10845 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        scanner.nextLine();
        // 큐 생성
        QueueAl queue = new QueueAl(num);
        int i = 0;
        String target;
        while (i < num) {
            target = scanner.nextLine();
            if (target.contains(" ")) {
                // push
                String[] splited = target.split(" ");
                queue.push(Integer.parseInt(splited[1]));
            } else if (target.equals("front")) {
                System.out.println(queue.front());
            } else if (target.equals("size")) {
                System.out.println(queue.size());
            } else if (target.equals("back")) {
                System.out.println(queue.back());
            } else if (target.equals("pop")) {
                System.out.println(queue.pop());
            } else if (target.equals("empty")) {
                System.out.println(queue.empty());
            } else if (target.equals("check")) {
                queue.check();
            }
            i++;
        }
    }
}
class QueueAl {
    Integer[] list;
    int lastOne;
    int cursor = 0;
    public QueueAl(int inital) {
        list = new Integer[inital];
        lastOne = inital;
    }
    public void check() {
        for (Integer integer : list) {
            System.out.print(integer + " , ");
        }
    }
    public void push(int target) {
        list[cursor] = target;
        cursor++;
    }
    public int pop() {
        Integer extracted = -1;
        for (int i = 0; i < lastOne; i++) {
            if (list[i] != null) {
                extracted = list[i];
                list[i] = null;
                // cursor--;
                break;
            }
        }
        return extracted;
    }
    public int front() {
        Integer extracted = -1;
        for (int i = 0; i < lastOne; i++) {
            if (list[i] != null) {
                extracted = list[i];
                break;
            }
        }
        return extracted;
    }
    public int size() {
        int j = 0;
        for (Integer integer : list) {
            if (integer != null)
                j++;
        }
        return j;
    }
    public int back() {
        Integer extracted = -1;
        for (int i = lastOne - 1; i >= 0; i--) {
            if (list[i] != null) {
                extracted = list[i];
                // cursor--;
                break;
            }
        }
        return extracted;
    }
    public int empty() {
        int target = 1;
        for (Integer integer : list) {
            if (integer != null) {
                target = 0;
                break;
            }
        }
        return target;
    }
}

이번 문제는 비교적 쉬운 문제였다.

어렵게 생각해서 좀 오래걸렸다.

null 값이랑 push 해준 값 찾기 위한 for 문만 잘써주고

push된 값이 어디까지 들어갔는지 확인을 위한 cursor 변수하나를 선언해준다.

그리고 push 할때마다 cursor++;를 해줌으로써 커서가 어딘지 계속확인해주면 된다.

Queue의 check 함수는 Integer 전체 배열을 확인하기 위한 디버그 용도이다.