반응형
이번 글에서는 백준 28279번 문제를 통해
deque를 개념을 익혀보자
문제 핵심
- N : 명령 수
- 1 ~ 8 까지의 명령어 종류
풀이 과정
다음 Deque를 통해 저번 백준 스택 문제와 같은 형태로 푸는 쉬운 문제이다.
1. 명령어 정의
1 ~ 8에 해당하는 명령어를 정의한다.
Java에는 deque가 존재하지만, 문제에 맞게 처리해야 하기 때문에 다시 정의해준다.
private static Deque<Integer> queue;
private static int isEmpty(){
return queue.isEmpty() ? 1 : 0;
}
private static void addFirst(int num) {
queue.addFirst(num);
}
private static void addLast(int num) {
queue.addLast(num);
}
private static int size(){
return queue.size();
}
private static int removeFirst() {
return queue.isEmpty() ? -1 : queue.removeFirst();
}
private static int removeLast() {
return queue.isEmpty() ? -1 : queue.removeLast();
}
private static int getFirst() {
return queue.isEmpty() ? -1 : queue.getFirst();
}
private static int getLast() {
return queue.isEmpty() ? -1 : queue.getLast();
}
2. 명령어 분류 처리
명령어 처리 1 ~ 8 까지의 명령어에 해당하는 함수를 실행한다.
int command = Integer.parseInt(stringTokenizer.nextToken());
switch (command) {
case 1:
addFirst(Integer.parseInt(stringTokenizer.nextToken()));
break;
case 2:
addLast(Integer.parseInt(stringTokenizer.nextToken()));
break;
case 3:
stringBuilder.append(removeFirst() + "\n" );
break;
case 4:
stringBuilder.append(removeLast() + "\n" );
break;
case 5:
stringBuilder.append(size() + "\n" );
break;
case 6:
stringBuilder.append(isEmpty() + "\n" );
break;
case 7:
stringBuilder.append(getFirst() + "\n" );
break;
case 8:
stringBuilder.append(getLast() + "\n" );
break;
}
아직까지는 실버 문제로 개념만 이해한다면,
문제 조건에 맞게 풀기만 한다면,
아주 쉽게 풀 수 있다.
이후에 해결할 골드이상의 문제에 대비해 이와 같은 문제를 많이 풀어보길 바란다.
전체코드
package org.example;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
private static Deque<Integer> queue;
private static int isEmpty(){
return queue.isEmpty() ? 1 : 0;
}
private static void addFirst(int num) {
queue.addFirst(num);
}
private static void addLast(int num) {
queue.addLast(num);
}
private static int size(){
return queue.size();
}
private static int removeFirst() {
return queue.isEmpty() ? -1 : queue.removeFirst();
}
private static int removeLast() {
return queue.isEmpty() ? -1 : queue.removeLast();
}
private static int getFirst() {
return queue.isEmpty() ? -1 : queue.getFirst();
}
private static int getLast() {
return queue.isEmpty() ? -1 : queue.getLast();
}
public static void main(String[] args) throws IOException {
queue = new ArrayDeque<>();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bufferedReader.readLine());
StringBuilder stringBuilder = new StringBuilder();
StringTokenizer stringTokenizer;
for (int i = 0; i < N; i++) {
stringTokenizer = new StringTokenizer(bufferedReader.readLine());
int command = Integer.parseInt(stringTokenizer.nextToken());
switch (command) {
case 1:
addFirst(Integer.parseInt(stringTokenizer.nextToken()));
break;
case 2:
addLast(Integer.parseInt(stringTokenizer.nextToken()));
break;
case 3:
stringBuilder.append(removeFirst() + "\n" );
break;
case 4:
stringBuilder.append(removeLast() + "\n" );
break;
case 5:
stringBuilder.append(size() + "\n" );
break;
case 6:
stringBuilder.append(isEmpty() + "\n" );
break;
case 7:
stringBuilder.append(getFirst() + "\n" );
break;
case 8:
stringBuilder.append(getLast() + "\n" );
break;
}
}
System.out.println(stringBuilder);
}
}
반응형
'백준 단계별 풀이' 카테고리의 다른 글
[ 백준 24511번 문제 ] queuestack - JAVA (1) | 2025.03.03 |
---|---|
[ 백준 2346번 문제 ] 풍선 터뜨리기 - JAVA (2) | 2025.03.02 |
[ 백준 11866번 문제 ] 요세푸스 문제 0 (2) | 2025.03.01 |
[ 백준 2164번 문제 ] 카드2 (0) | 2025.02.27 |
[ 백준 28278번 문제 ] 스택 2 - JAVA (1) | 2025.02.04 |