본문 바로가기
Back-end/Algorithm

[Java] 18258 큐2_BAEKJOON

by sgyeong 2024. 1. 20.

지난번에 푼 10845 큐에 이어 큐 복습문제

처음 제출했을 때 Scanner를 사용했더니 시간초과가 떠서 BufferedReader, BufferedWriter를 사용해 다시 풀었다.

 

문제

 

* 시작하기 전에

 

Queue

 

FIFO (First-In First-Out구조) : 처음에 저장한 데이터를 가장 먼저 꺼내는 자료 구조

Queue는 인터페이스이기 때문에 실제 구현체는 LinkedList를 선언해줘야 함.

 

Queue

add : 데이터 추가. 저장공간이 부족하면 IllegalStateException 에러 발생

offer : 데이터 추가. 값 추가 실패 시 false 반환

remove : 큐의 맨 앞에 있는 값 반환 후 삭제. 큐가 비어있는 경우 NoSuchElementException에러 발생

poll : 큐 맨 앞에 있는 값 반환 후 삭제. 큐가 비어있을 경우 null 반환

peek : 큐의 맨 앞에 있는 값 반환. 큐가 비어있을 경우 null 반환

clear : 큐 비우기

 

 

 

먼저 입력과 출력을 받기 위해 BufferedReader와 BufferedWriter를 생성하고 연산의 개수를 입력받는다.

큐에 삽입될 숫자를 저장하는 변수 num과 큐의 현재 크기를 저장하는 변수 size를 각각 초기화한다.

 

 

N번의 연산을 반복한다.

한 줄을 읽어와서 공백을 기준으로 토큰으로 나눈다.

명령을 나타내는 문자열을 가져온다.

 

switch를 이용하였다. 

 

order가 "push"일 경우

숫자를 읽어서 큐에 넣고(push), 큐의 크기를 증가시킨다(size++).

 

이때 st.nextToken()은 StringTokenizer를 통해 받아온 문자열 토큰이다. 때문에 num에 저장하기 위해선 Integer.parseInt를 통해 정수로 변환해서 저장해야 한다. 

 

order가 "pop"일 경우

 

만약 queue가 비어있을 경우(isEmpty()) -1을 출력하고, 아니면 큐에서 값을 꺼내 출력후 삭제하고 큐의 크기를 감소한다.

 

order가 "size"일 경우

 

queue의 사이즈를 출력한다. bw.write 메서드는 문자열을 쓰는 것이다. size는 int이기 때문에 문자열로 반환하여 써야 하기 때문에 Integer.toString()메서드를 사용해 int인 size를 문자열로 변환해준다.

 

 

order가 "front"일 경우

만약 queue가 비어있으면(isEmpty()) -1을 출력한다. 아니면 큐의 가장 앞에 있는 정수를 출력한다. 

 

 

order가 "empty"일 경우

 

만약 queue가 비어있을 경우(isEmpty()) 1을 출력하고 아니면 0을 출력한다.

 

 

order가 "back"일 경우

 

만약 queue가 비어있을 경우(isEmpty()) -1을 출력하고, 아니면 마지막 값을 출력한다. peekLast()메서드를 사용하기 위해 큐 객체를 LinkedList<Integer>로 형변환 후 peekLast()로 마지막 값을 추출한다.

 

 

전체 코드

'Back-end > Algorithm' 카테고리의 다른 글

[Java] 17219. 비밀번호 찾기 _BAEKJOON  (0) 2024.04.08
[Java] 1764. 듣보잡_BAEKJOON  (0) 2024.01.19