티스토리 뷰
728x90
문제
- 정수를 저장하는 덱(Deque)을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램 작성
- push_front X : 정수 X를 덱의 앞에 넣기
- push_back X : 정수 X를 덱의 뒤에 넣기
- pop_front : 덱의 가장 앞에 있는 정수를 빼고, 그 수 출력. 만약 덱에 들어있는 정수가 없는 경우 -1 출력
- pop_back : 덱의 가장 뒤에 있는 정수를 빼고, 그 수 출력. 만약 덱에 들어있는 정수가 없는 경우 -1 출력
- size : 덱에 들어있는 정수의 개수 출력
- empty : 덱이 비어있으면 1, 아니면 0 출력
- front : 덱의 가장 앞에 있는 정수 출력. 만약 덱에 들어있는 정수가 없는 경우 -1 출력
- back : 덱의 가장 뒤에 있는 정수 출력. 만약 덱에 들어있는 정수가 없는 경우 -1 출력
해결방법
이 문제를 해결할 때에는 자바 내의 ArrayDeque 클래스를 이용하여 문제를 해결하였다. push_front X (addFirst()), push_back X (addLast()), pop_front (pollFirst()), pop_back (pollLast()), size (size()), empty (isEmpty()), front (peekFirst()), back (peekLast()) 메소드를 이용하여 문제를 해결하였다.
코드
import java.io.*;
import java.util.*;
class Main {
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());
ArrayDeque<Integer> deque = new ArrayDeque<>(); // 숫자를 저장하는 deque
for(int i = 0; i<N; i++){
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
String command = st.nextToken();
// push_front 연산을 위해 addFirst() 메소드 이용
if(command.equals("push_front")) queue.addFirst(Integer.parseInt(st.nextToken()));
// push_back 연산을 위해 addLast() 메소드 이용
else if(command.equals("push_back")) queue.addLast(Integer.parseInt(st.nextToken()));
// pop_front 연산을 위해 pollFirst() 메소드 이용
else if(command.equals("pop_front")){
if (queue.isEmpty()) sb.append(-1).append("\n");
else sb.append(queue.pollFirst()).append("\n");
}
// pop_back 연산을 위해 pollLast() 메소드 이용
else if(command.equals("pop_back")){
if (queue.isEmpty()) sb.append(-1).append("\n");
else sb.append(queue.pollLast()).append("\n");
}
// size 연산을 위해 size() 메소드 이용
else if (command.equals("size")) sb.append(queue.size()).append("\n");
// empty 연산을 위해 isEmpty() 메소드 이용
else if (command.equals("empty")){
if (queue.isEmpty()) sb.append(1).append("\n");
else sb.append(0).append("\n");
}
// front 연산을 위해 peekFirst() 메소드 이용
else if(command.equals("front")){
if (queue.isEmpty()) sb.append(-1).append("\n");
else sb.append(queue.peekFirst()).append("\n");
}
// back 연산을 위해 peekLast() 메소드 이용
else if(command.equals("back")){
if (queue.isEmpty()) sb.append(-1).append("\n");
else sb.append(queue.peekLast()).append("\n");
}
}
System.out.println(sb);
br.close();
}
}
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 9095번 1, 2, 3 더하기(JAVA) (0) | 2022.12.19 |
---|---|
[백준] 1497번 기타콘서트(JAVA) (0) | 2022.12.19 |
[백준] 10845번 큐(JAVA) (0) | 2022.07.28 |
[백준] 10828번 스택(JAVA) (1) | 2022.07.28 |
[백준] 10816번 숫자 카드 2(JAVA) (0) | 2022.07.28 |
댓글