```
백준 10866번 덱 JAVA 구현해보기
```
이번 글을 통해 배워갈 내용
- 백준 10866번 풀이
https://www.acmicpc.net/problem/10866
백준 10866번 나는 덱은
난이도 브론즈 등급의 문제로서
N개의 명령어를 입력받고
명령어에 따라서 Deque 기능을 구현해주면 됩니다.
명령어의 종류는 아래와 같습니다.
push_front X: 정수 X를 덱의 앞에 넣는다.
push_back X: 정수 X를 덱의 뒤에 넣는다.
pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 덱에 들어있는 정수의 개수를 출력한다.
empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.
front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
back: 덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
명령어의 개수를 입력받고
입력받은 만큼 반복해서
문자열을 입력받고
dqCmd라는 임의의 함수를 실행합니다.
자바 유틸의 Deque를 써서 간단하게
명령어에 맞게 기능을 처리하였습니다.
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 {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static Deque<Integer> dq = new ArrayDeque<>();
public static void main(String[] args) throws IOException {
int testCase = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < testCase; i++) {
sb.append(dqCmd(br.readLine()));
}
sb.setLength(sb.length() - 1);
System.out.println(sb);
}
private static String dqCmd(String cmd) {
String retVal = "";
// size: 덱에 들어있는 정수의 개수를 출력한다.
if (cmd.equals("size")) {
retVal = dq.size() + "\n";
}
// empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.
else if (cmd.equals("empty")) {
if (dq.isEmpty()) {
retVal = 1 + "\n";
} else {
retVal = 0 + "\n";
}
}
// front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
else if (cmd.equals("front")) {
if (dq.isEmpty()) {
retVal = -1 + "\n";
} else {
retVal = dq.peekFirst() + "\n";
}
}
// back: 덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
else if (cmd.equals("back")) {
if (dq.isEmpty()) {
retVal = -1 + "\n";
} else {
retVal = dq.peekLast() + "\n";
}
}
// pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
else if (cmd.equals("pop_front")) {
if (dq.isEmpty()) {
retVal = -1 + "\n";
} else {
retVal = dq.peekFirst() + "\n";
dq.removeFirst();
}
}
// pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
else if (cmd.equals("pop_back")) {
if (dq.isEmpty()) {
retVal = -1 + "\n";
} else {
retVal = dq.peekLast() + "\n";
dq.removeLast();
}
}
// push_front X: 정수 X를 덱의 앞에 넣는다.
else if (cmd.contains("push_front")) {
StringTokenizer st = new StringTokenizer(cmd, " ");
st.nextToken();
int num = Integer.parseInt(st.nextToken());
dq.addFirst(num);
}
// push_back X: 정수 X를 덱의 뒤에 넣는다.
else if (cmd.contains("push_back")) {
StringTokenizer st = new StringTokenizer(cmd, " ");
st.nextToken();
int num = Integer.parseInt(st.nextToken());
dq.addLast(num);
}
// 에러 처리
else {
System.out.println("error");
}
return retVal;
}
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
'Java > Java 알고리즘' 카테고리의 다른 글
백준 15829번 Hashing JAVA 구현해보기 (0) | 2022.02.08 |
---|---|
백준 11656번 접미사배열 JAVA 구현해보기 (0) | 2022.02.08 |
백준 6975번 Deficient, Perfect, and Abundant JAVA 구현해보기 (0) | 2022.02.06 |
백준 2845번 파티가 끝나고 난 뒤JAVA 구현해보기 (0) | 2022.02.05 |
백준 4299번 축구점수 JAVA 구현해보기 (0) | 2022.02.05 |