문제 링크
주의사항
- JAVA를 사용하여 프로그램을 사용하였습니다.
- 백준에서 코드를 작성하였을 때 아래 형태에서 Main에서 결과가 출력되어야 합니다.
public class Main{
public static void main(String[] args){
}
}
문제 설명
접근 방법
큐는 FIFO(선입선출)의 형태를 가지고 있는 자료 구조입니다.자세한 내용은 아래에 링크를 통해 확인해주시면 감사하겠습니다.
만약 큐에 값을 넣었을 때와 삭제할 때를 표를 통해 보여드리자면
1. 3을 큐에 넣었을 때
3 |
2. 2을 큐에 넣었을 때
2 | 3 |
3. 1을 큐에 넣었을 때
1 | 2 | 3 |
4. 큐에서는 자료를 출력할 때에는 FIFO로 처음 저장된 값부터 출력됩니다.
출력을 진행하면
1 | 2 |
처음 저장되었던 3이 큐에서 빠져나옵니다.
Java에서 큐를 표현하려면 LinkedList<>()로 선언해주어야 하므로 큐을 선언해주었습니다.
문제에서는 push x, pop, size, empty, front, back을 구현하도록 되어있습니다.
push x : Queue.add()를 사용하여 구현하였습니다.
pop: Queue.poll()을 사용하여 구현하였습니다.
size : Queue.size을 사용하여 구현하였습니다.
empty : Queue.isEmpty을 사용하여 구현하였습니다.
front : Queue.peek을 사용하여 구현하였습니다.
back : 변수를 통해 push된 가장 최근 값을 저장하여 출력하였습니다.
- BufferedReader를 사용하여 입력 값을 받았습니다.
- StringTokenizer를 통해서 명령어와 값을 띄어쓰기 기준으로 나누었습니다.
- if문을 통해서 명령어에 해당하는 함수를 실행하도록 하였습니다.
- push/pop/size/empty/front/back 진행하였습니다.
- BufferedWriter에 명령어 실행마다 결과를 저장하였습니다.
- BufferedWriter에 저장된 결과를 모두 출력하였습니다.
결과 코드
import java.io.*;
import java.util.*;
public class Main{
static int N; //명령어 개수 저장 변수
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//입력값 처리하는 BufferedReader
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
//결과값 출력하는 BufferedWriter
Queue<Integer> queue = new LinkedList<Integer>(); //사용할 Queue
StringTokenizer st;
N = Integer.parseInt(br.readLine());
int bottomValue = 0; //가장 뒤에 있는 값 초기화
for(int i=0;i<N;i++) {
String command = br.readLine(); //명령어 읽기
if(command.equals("pop")) { //pop
if(queue.isEmpty())
bw.write("-1\n");
else
bw.write(queue.poll() + "\n");
}else if(command.equals("size")) //size
bw.write(queue.size() + "\n");
else if(command.equals("empty")) //empty
bw.write((queue.isEmpty()?1:0) + "\n");
else if(command.equals("front")) { //front
bw.write((queue.isEmpty()?-1:queue.peek()) + "\n");
}else if(command.equals("back")) { //back
bw.write((queue.isEmpty()?-1:bottomValue) + "\n");
}else { //push
st = new StringTokenizer(command," ");
String temp = st.nextToken();
int num = Integer.parseInt(st.nextToken());
bottomValue = num; //가장 뒷 값 변경
queue.add(num);
}
}
bw.flush(); //저장된 명령어 결과 출력
bw.close();
br.close();
}
}
'백준' 카테고리의 다른 글
[백준] code.plus(큐와 그래프,JAVA)13023번, ABCDE (0) | 2022.04.22 |
---|---|
[백준] 단계별로 풀어보기(단계:16, 누적합,JAVA)11659번, 구간 합 구하기 4 (0) | 2022.04.21 |
[백준] 단계별로 풀어보기(단계:25, 최단 경로,JAVA)13549번, 숨바꼭질 3 (0) | 2022.04.19 |
[백준] code.plus(다이나믹 프로그램 part 2,JAVA)2133번, 타일 채우기 (0) | 2022.04.18 |
[백준] 단계별로 풀어보기(단계:27, 동적 계획법과 최단거리 역추적,JAVA)9252번, LCS 2 (0) | 2022.04.17 |
댓글