[백준/자바] 18258 큐 2
📌 문제
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
⚔ 입력
첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.
📣 출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
💎 문제분석하기
자료구조 큐의 명령어를 구현하면 되는 문제이다.
if나 case 조건절 분기를 사용하지 않고 enum을 활용한 호출로 구현한 방식이다.
💡 코드 구현하기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
import java.util.StringTokenizer;
public class Main {
public static Deque<Integer> deque = new ArrayDeque<>();
public static int size = 0;
public static int pushValue;
public static StringBuilder stringBuilder;
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine(), " ");
int N = Integer.parseInt(stringTokenizer.nextToken());
stringBuilder = new StringBuilder();
while (N-- > 0) {
stringTokenizer = new StringTokenizer(bufferedReader.readLine(), " ");
String command = stringTokenizer.nextToken();
if (command.equals("push")) {
pushValue = Integer.parseInt(stringTokenizer.nextToken());
}
Arrays.stream(DequeCommand.values())
.filter(commands -> commands.commandName.equals(command))
.findFirst()
.orElse(DequeCommand.NoneObject)
.dequeCommand.command();
}
System.out.println(stringBuilder);
}
public interface Command {
void command();
}
public enum DequeCommand {
pushCommand("push", new Command() {
@Override
public void command() {
deque.offer(pushValue);
}
}),
frontCommand("front", () -> {
Integer front = deque.peek();
if (front == null) {
stringBuilder.append(-1).append('\n');
} else {
stringBuilder.append(front).append('\n');
}
}),
backCommand("back", () -> {
Integer last = deque.peekLast();
if (last == null) {
stringBuilder.append(-1).append('\n');
} else {
stringBuilder.append(last).append('\n');
}
}),
sizeCommand("size", () -> {
stringBuilder.append(deque.size()).append('\n');
}),
emptyCommand("empty", () -> {
if (deque.isEmpty()) {
stringBuilder.append(1).append('\n');
} else {
stringBuilder.append(0).append('\n');
}
}),
popCommand("pop", () -> {
Integer value = deque.poll();
if (value == null) {
stringBuilder.append(-1).append('\n');
} else {
stringBuilder.append(value).append('\n');
}
}),
NoneObject("", () -> {
throw new RuntimeException();
});
private final String commandName;
private final Command dequeCommand;
DequeCommand(String commandName, Command dequeCommand) {
this.commandName = commandName;
this.dequeCommand = dequeCommand;
}
}
}
풀이 참고 : Do it! 알고리즘 코딩테스트 - 자바 편
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준/파이썬] 1065 한수 (0) | 2022.11.30 |
---|---|
[백준/파이썬] 4673 셀프 넘버 (1) | 2022.11.30 |
[백준/파이썬] 2953 나는 요리사다 (0) | 2022.11.28 |
[백준/자바] 11050 이항 계수 구하기 1 (0) | 2022.11.27 |
[백준/자바] 11404 플로이드 (0) | 2022.11.26 |