```
백준 10866번 덱 JAVA 구현해보기
```
이번 글을 통해 배워갈 내용
- 백준 10866번 풀이
https://www.acmicpc.net/problem/10866
10866번: 덱
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
백준 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 |