https://www.acmicpc.net/problem/18258
- 예제 입력1
15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front
- 예제 출력1
1
2
2
0
1
2
-1
0
1
-1
0
3
- 문제 접근
- 큐 명령어
- push X : 정수 X를 Queue에 추가 → add(X)
- pop : Queue에 가장 앞의 정수를 빼고 그 수를 출력, 큐가 비어있다면 없다면 -1 → poll()
- size : 큐에 있는 정수 개수 출력 → size()
- empty : 큐가 비어있으면 1, 아니면 0 출력 → isEmpty()
- front : 큐의 가장 앞 정수 출력, 큐가 비어있다면 -1 출력 → peek()
- back : 큐의 가장 뒤 정수 출력, 큐가 비어있다면 -1 출력 → 메서드 생성
- 입력
- 첫째 줄 : 명령의 수 N(1 <= N <= 2,000,000)
- ~ N번째 줄 : 명령 (1 <= 정수 X <= 100,000)
- 출력
- 출력 명령 하나마다 1개씩 출력
- 큐 명령어
- 문제 해결
- 문자열을 입력 받아 push로 시작하면 Queue에 X 삽입
- 나머지 명령은 switch-case문으로 구성
- 큐의 가장 뒤 정수를 출력하는 방법은 없기 때문에 메소드 생성
- LinkedList로 구현하는 경우 getLast() 메서드 사용
- Queue의 경우 순회하여 가장 마지막 데이터 출력
→ Queue의 Size가 매우 클 경우 순회하는 데 시간이 오래 걸려서 그런지 시간 초과 (성능적으로 좋지 않음) - Deque로 구현
- 기존 풀이 [메모리 : 408,288 KB / 시간 : 1292 ms]
static Queue<Integer> queue = new LinkedList<>();
public static void main(String[] args) throws IOException{
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
for(int i = 0; i < N; i++){
String command = br.readLine();
if(command.startsWith("push")) {
int data = Integer.parseInt(command.split(" ")[1]);
queue.add(data);
continue;
}
switch(command) {
case "pop" :
if(queue.isEmpty()) sb.append("-1");
else sb.append(queue.poll());
break;
case "size" :
sb.append(queue.size());
break;
case "empty" :
if(queue.isEmpty()) sb.append(1);
else sb.append(0);
break;
case "front" :
if(queue.isEmpty()) sb.append(-1);
else sb.append(queue.peek());
break;
case "back" :
if(queue.isEmpty()) sb.append(-1);
else sb.append(lastData());
}
sb.append("\n");
}
System.out.println(sb);
}
private static int lastData() {
// LinkedList로 형변환
return ((LinkedList<Integer>) queue).getLast();
// Queue를 순회하여 마지막 데이터 반환
// int lastData = 0;
// for(int data : queue){
// lastData = data;
// }
//
// return lastData;
}
'Coding Test > Step16. 스택, 큐, 덱' 카테고리의 다른 글
[Java] 8단계. 요세푸스 문제 0 [11866번] (1) | 2024.11.11 |
---|---|
[Java] 7단계. 카드 2 [2164번] (0) | 2024.11.11 |
[Java] 5단계. 도키도키 간식드리미 [12789번] (0) | 2024.11.09 |
[Java] 4단계. 균형잡힌 세상 [4949번] (1) | 2024.11.09 |
[Java] 3단계. 괄호 [9012번] (0) | 2024.11.09 |