반응형
🅰 백준 10866. 덱
✏️ 문제 풀이
- 덱을 풀기 위한 가장 기본적인 문제이다.
- 덱에대한 개념이 궁금하다면 ?
- 나는 라이브러리를 사용하여 문제를 풀었고, 위의 개념을 읽고 온다면 쉽게 코드를 이해할 수 있을 것이다. 그러므로 해설은 넘어가도록 하겠다.
- 문제를 풀면서 느꼈던 점은 나는 String전체를 읽어왔는데, 백준에서 시간을 짧게 푼 사람들의 코드를 보면 String내에서도 앞글자, 중간글자 즉, chatAt(x)를 이용하여 한글자만 따와서 유일값을 만든 뒤에 비교하여 출력하는 것이였다.
- String을 전부 비교하는 것 보다는 훨씬 빠를 것이라 생각했다. 문제를 풀때 새로운 시각을 알게 되었다.
✏️ 소스코드
package codingtestPractice.실버.백준_실버4_덱;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.StringTokenizer;
public class 백준_10866 {
static Deque<Integer> deque = new ArrayDeque<>();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
String text = null;
int num = 0;
if (st.countTokens() == 2) {
text = st.nextToken();
num = Integer.parseInt(st.nextToken());
if (text.equals("push_front")) {
deque.addFirst(num);
} else if (text.equals("push_back")) {
deque.add(num);
}
} else {
text = st.nextToken();
switch (text) {
case "front":
if (checksize()) // 만약 비어있다면
sb.append("-1");
else
sb.append(deque.peek());
break;
case "back":
if (checksize()) // 만약 비어있다면
sb.append("-1");
else
sb.append(deque.peekLast());
break;
case "pop_front":
if (checksize()) // 만약 비어있다면
sb.append("-1");
else
sb.append(deque.poll());
break;
case "pop_back":
if (checksize()) // 만약 비어있다면
sb.append("-1");
else
sb.append(deque.pollLast());
break;
case "size":
sb.append(deque.size());
break;
case "empty":
if (checksize()) // 만약 비어있다면
sb.append(1);
else
sb.append(0);
break;
}
sb.append("\n");
}
}
System.out.println(sb);
}
private static boolean checksize() {
if (deque.isEmpty()) {
return true;
}
return false;
}
}
✅ 후기
- 덱에대한 개념이 없었는데 이번 문제를 풀면서 덱에대해 조금은 더 알게되었다. 하지만 큐와 스택이 더 유명한 이유는 뭘까? 덱의 장 단점을 더 공부해봐야겠다.
반응형
'백준 > 자료구조' 카테고리의 다른 글
백준 2824. 최대공약수 (0) | 2021.11.05 |
---|
댓글