반응형
문제
예제1
예제 1번은 아래와 같이 이해할 수 있습니다.
풀이1 - 정답 (배열 사용)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
// push X: 정수 X를 큐에 넣는 연산이다.
// pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
// size: 큐에 들어있는 정수의 개수를 출력한다.
// empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
// front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
// back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());//명령 개수
StringBuilder sb = new StringBuilder();
int[] arr = new int[n];
int size = 0;
String s;
for(int i = 0; i < n; i++) {
s = br.readLine();
if(s.contains("push")) {
StringTokenizer st = new StringTokenizer(s);
st.nextToken();
arr[size++] = Integer.parseInt(st.nextToken());
}else {
switch(s) {
case "pop":
if(size == 0) {
// 비어있는 경우
sb.append(-1 + "\n");
}else {
size--;
sb.append(arr[0] + "\n");
int tmp;
for(int j = 1; j <= size; j++) {
tmp = arr[j];
arr[j - 1] = tmp;
arr[j] = 0;
}
}
break;
case "size":
sb.append(size + "\n");
break;
case "empty":
if(size == 0) {
// 비어있는 경우
sb.append(1 + "\n");
}else {
sb.append(0 + "\n");
}
break;
case "front":
if(size == 0) {
// 비어있는 경우
sb.append(-1 + "\n");
}else {
sb.append(arr[0] + "\n");
}
break;
case "back":
if(size == 0) {
// 비어있는 경우
sb.append(-1 + "\n");
}else {
sb.append(arr[size - 1] + "\n");
}
break;
}
}
}
System.out.println(sb);
br.close();
}
;}
풀이2 - 정답 (Deque 사용)
풀이1에서 배열로 풀이한 문제를 아래와 같이 Deque을 활용해서도 풀이가 가능합니다.
Deque는 Stack과 Queue의 혼합형으로, Queue와는 달리 데이터를 앞, 뒤로 삽입/추출이 가능합니다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception{
// push X: 정수 X를 큐에 넣는 연산이다.
// pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
// size: 큐에 들어있는 정수의 개수를 출력한다.
// empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
// front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
// back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());//명령 개수
StringBuilder sb = new StringBuilder();
Deque<Integer> que = new LinkedList<>();
String s;
for(int i = 0; i < n; i++) {
s = br.readLine();
if(s.contains("push")) {
StringTokenizer st = new StringTokenizer(s);
st.nextToken();
que.add(Integer.parseInt(st.nextToken()));
}else {
switch(s) {
case "pop":
if(que.isEmpty()) {
// 비어있는 경우
sb.append(-1 + "\n");
}else {
sb.append(que.peek() + "\n");
que.poll();
}
break;
case "size":
sb.append(que.size() + "\n");
break;
case "empty":
if(que.isEmpty()) {
// 비어있는 경우
sb.append(1 + "\n");
}else {
sb.append(0 + "\n");
}
break;
case "front":
if(que.isEmpty()) {
// 비어있는 경우
sb.append(-1 + "\n");
}else {
sb.append(que.peek() + "\n");
}
break;
case "back":
if(que.isEmpty()) {
// 비어있는 경우
sb.append(-1 + "\n");
}else {
sb.append(que.peekLast() + "\n");
}
break;
}
}
}
System.out.println(sb);
br.close();
}
}
팁
Queue
2021.10.15 - [알고리즘/자료구조] - 자료구조 - 큐(Queue)의 정의와 예제
자료구조 - 큐(Queue)의 정의와 예제
자료구조(Data Structure)란? 데이터를 표현하고 관리하고 처리하기 위한 구조를 의미한다. 그 중 스택과 큐는 자료구조의 기초 개념으로 다음의 두 핵심적인 함수로 구성된다. 삽입(Push): 데이터를
soo-vely-dev.tistory.com
출처
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
반응형
'알고리즘 > Java' 카테고리의 다른 글
[백준] 9093. 단어 뒤집기(Java8) (0) | 2023.01.10 |
---|---|
[백준] 1158. 요세푸스 문제(Java8) (0) | 2023.01.09 |
[백준] 10828. 스택(Java8) (0) | 2022.12.28 |
알고리즘 - 최대공약수 계산(유클리드 호제법) java 예제 (0) | 2021.10.23 |
[백준] 11050.이항 계수 1(Java8) (0) | 2021.10.22 |