BOJ 10845, 큐 [C++, Java]

junto·2024년 1월 11일
0

boj

목록 보기
10/56
post-thumbnail

문제

BOJ 10845, 큐

핵심

  • 입력의 크기가 10410^4이라 대략 O(N2)O(N^2) 이하의 알고리즘을 사용한다.
  • 큐 자료구조를 주어진대로 잘 사용할 수 있는지 묻는 간단한 문제이다.
  • java에서 queue 인터페이스로는 가장 늦게 삽입한 원소를 알 수 없다. 구체 클래스인 LinkedList를 직접 사용해도 되지만, queue 인터페이스에서도 아래와 같이 형변환을 통해 접근할 수 있다.
(LinkedList<Integer>)Q).getLast()

개선

코드

시간복잡도

  • O(N)O(N)

C++

#include <iostream>
#include <queue>
using namespace std;

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int n;
	cin >> n;
	queue<int> q;
	while (n--) {
		string cmd;
		cin >> cmd;
		if (cmd == "push") {
			int num;
			cin >> num;
			q.push(num);
		} else if (cmd == "pop") {
			if (q.empty()) {
				cout << -1 << '\n';
				continue;
			}
			cout << q.front() << '\n';
			q.pop();
		} else if (cmd == "size") {
			cout << q.size() << '\n';
		} else if (cmd == "empty") {
			if (q.empty()) {
				cout << 1 << '\n';
				continue;
			}
			cout << 0 << '\n';
		} else if (cmd == "front") {
			if (q.empty()) {
				cout << -1 << '\n';
				continue;
			}
			cout << q.front() << '\n';
		} else if (cmd == "back") {
			if (q.empty()) {
				cout << -1 << '\n';
				continue;
			}
			cout << q.back() << '\n';
		}
	}
}

Java

import java.io.*;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

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> Q = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            String cmd = st.nextToken();
            if ("push".equals(cmd)) {
                int num = Integer.parseInt(st.nextToken());
                Q.add(num);
            } else if ("pop".equals(cmd)) {
                if (Q.isEmpty()) {
                    bw.write(-1 + "\n");
                    continue;
                }
                bw.write(Q.poll() + "\n");
            } else if ("size".equals(cmd)) {
                bw.write(Q.size() + "\n");
            } else if ("empty".equals(cmd)) {
                if (Q.isEmpty()) {
                    bw.write(1 + "\n");
                    continue;
                }
                bw.write(0 + "\n");
            } else if ("front".equals(cmd)) {
                if (Q.isEmpty()) {
                    bw.write(-1 + "\n");
                    continue;
                }
                bw.write(Q.peek() + "\n");
            } else if ("back".equals(cmd)) {
                if (Q.isEmpty()) {
                    bw.write(-1 + "\n");
                    continue;
                }
                bw.write(((LinkedList<Integer>)Q).getLast() + "\n");
            }
        }
        bw.flush();
        bw.close();
        br.close();
    }
}

profile
꾸준하게

0개의 댓글