백준 단계별 풀이
[ 백준 28279번 문제 ] 덱 2 - JAVA
anycoding
2025. 3. 1. 19:04
반응형
이번 글에서는 백준 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);
}
}
반응형