문제
BOJ 10845, 큐
핵심
- 입력의 크기가 104이라 대략 O(N2) 이하의 알고리즘을 사용한다.
- 큐 자료구조를 주어진대로 잘 사용할 수 있는지 묻는 간단한 문제이다.
- java에서 queue 인터페이스로는 가장 늦게 삽입한 원소를 알 수 없다. 구체 클래스인 LinkedList를 직접 사용해도 되지만, queue 인터페이스에서도 아래와 같이 형변환을 통해 접근할 수 있다.
(LinkedList<Integer>)Q).getLast()
개선
코드
시간복잡도
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();
}
}