10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
자료구조를 공부하며 나온 문제여서
보자마자 LinkedList가 떠올랐다.
각 명령어에 맞는 기능들을 수행할 수 있도록
LinkedList에서 쓸 수 있는 메서드들을 사용했다.
poll()은 큐에 가장 먼저 들어간 값을 제거하며 반환하고, 비어있으면 null을 반환한다.
getFirst()는 poll처럼 가장 앞에 있는 값을 가져온다.
하지만 큐에서 빼오진 않기 때문에 큐는 변함이 없다.
getLast()를 쓰면 가장 뒤에 있는 값을 가져올 수 있다.
역시 큐에 영향을 주진 않는다.
Queue를 만들땐 Queue타입으로 변수 하나를 만들고 LinkedList를 가리키게 한다.
하지만 Queue타입으로 만든다면 getFirst()와 getLast()를 쓸 수 없기때문에
LinkedList타입으로 만들었다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
import java.io.*;
import java.lang.invoke.SwitchPoint;
import java.util.*;
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));
LinkedList<Integer> q = new LinkedList<>();
int N = Integer.parseInt(br.readLine());
while(N-- > 0){
String input = br.readLine();
String[] arr = input.split(" ");
switch (arr[0]){
case "push":
q.add(Integer.parseInt(arr[1]));
break;
case "pop":
if(q.peek() == null)
bw.write("-1\n");
else
bw.write(q.poll()+"\n");
break;
case "size":
bw.write(q.size()+"\n");
break;
case "empty":
if(q.isEmpty())
bw.write("1\n");
else
bw.write("0\n");
break;
case "front":
try{
bw.write(q.getFirst()+"\n");
}catch (Exception e){
bw.write("-1\n");
}
break;
case "back":
try{
bw.write(q.getLast()+"\n");
}catch (Exception e){
bw.write("-1\n");
}
break;
}
}
br.close();
bw.flush();
bw.close();
}
}
|
cs |
'알고리즘 > 백준' 카테고리의 다른 글
| 백준 10866 덱 자바[java] (0) | 2023.01.02 |
|---|---|
| 백준 1158 요세푸스 자바[java] (0) | 2023.01.02 |
| 백준 1406 에디터 자바[java] (0) | 2023.01.01 |
| 백준 1874번 스택 수열 자바[java] (0) | 2022.12.31 |
| 백준 9012번 괄호 자바[java] (0) | 2022.12.31 |