728x90
반응형
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.입력
입력
- 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
- 출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
풀이
처음에는 큐를 이용해서 풀었다. 문제가 생겼다.
큐는 가장 나중에 들어간 값을 출력하거나 삭제할 수 없다. 구조가 선입선출이기 때문이다. 그래서 Deque 덱을 이용했다. 덱은 큐와 스택의 함수를 모두 사용할 수 있다. 데이터 추출과 삭제를 앞 뒤로 모두 할 수 있다.
덱 함수 사용은 아래 기재한 블로그를 참고했다.
https://soft.plusblog.co.kr/24
[Java(자바)] Deque(덱/데크) 자료구조
카프카의 소스코드를 보던 중 내부에서 Deque 클래스를 사용한 부분을 보게 되었다. Deque(덱 혹은 데크)은 Double-Ended Queue의 줄임말로 큐의 양쪽으로 엘리먼트의 삽입과 삭제를 수행할 수 있는 자료
soft.plusblog.co.kr
덱만 활용할 수 있다면 아주 기초적인 문제라서 금방 풀 수 있다.
package net.coding.day4;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;
public class queue {
public static void main(String[] args) throws IOException{
//입력받는다
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
Deque<String> queue = new ArrayDeque<String>();
StringBuffer sb = new StringBuffer();
while(n-- > 0) {
String command[]=br.readLine().split(" ");
if(command[0].equals("push")) {
queue.add(command[1]);
}
else {
if(command[0].equals("pop")) {
if(queue.isEmpty()) {
sb.append("-1");
}else {
sb.append(queue.poll());
}
}else if(command[0].equals("size")) {
sb.append(queue.size());
}else if(command[0].equals("empty")) {
if(queue.isEmpty()) {
sb.append(1);
}else sb.append(0);
}else if(command[0].equals("front")) {
if(queue.isEmpty()) sb.append(-1);
else sb.append(queue.getFirst());
}else if(command[0].equals("back")) {
if(queue.isEmpty()) sb.append(-1);
else sb.append(queue.getLast());
}
sb.append("\n");
}
}
System.out.println(sb);
}
}
어제 하루 포스팅을 못 했다. 예약이라도 걸어둘걸.. 오늘 면접이 있어서 코테문제를 풀 여력이 없었다. 면접준비를 해야했기 때문이다. 면접은 합격을 했고, 다시 공부를 시작해야겠다. 그동안 Visual Studio Code를 쓰고 있었는데 인텔리제이intelliJ도 한 번 써봐야겠다. 회사에서 쓰고 있다고 한다. 입사 전까지 더 많은 것을 공부하고 가야지. 그리고 계속 코딩테스트와 프론트 프레임웍을 공부할 것이다.
728x90
반응형
'CODING-TEST' 카테고리의 다른 글
[백준 문제풀이 javascript] 4673번 셀프넘버 (0) | 2022.06.23 |
---|---|
[백준 문제풀이 javascript] 4344번 평균은 넘겠지 (0) | 2022.06.16 |
[백준 문제풀이 자바java11] 1406번 LInkedList, 스택 자바 (0) | 2021.06.06 |
[백준 문제풀이 자바java11] 10828번 스택 자바 (0) | 2021.06.05 |
코딩테스트는 어떤 순서로 공부할까? 매우 기초부터 시작하는 커리큘럼 을 도전해본다. (0) | 2021.06.05 |