문제
문제 링크 : https://www.acmicpc.net/problem/10845
수도코드 작성
스위치문으로 각각의 명령어에 대한 수행을 하면 된다고 생각했다.
작성한 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.io.*;
public class QU {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //읽는 속도를 위해서 BufferedReader사용
int N = Integer.parseInt(br.readLine());
ArrayList<Integer> queue = new ArrayList<>();
String[] command = new String[2];
for(int i=0; i<N; i++){
String command0 = br.readLine();
command = command0.split(" "); //명령어와 뒤에 숫자를 나누기위해 사용
switch (command[0]){
case "push": // PUSH명령어
int num = Integer.parseInt(command[1]);
queue.add(num);
continue;
case "pop": // POP명령어
if(queue.isEmpty()){
System.out.println(-1);
}else{
System.out.println(queue.get(0));
queue.remove(0);
}
continue;
case "size": // SIZE명령어
System.out.println(queue.size());
continue;
case "empty": // EMPTY명령어
if(queue.isEmpty()){
System.out.println(1);
}else System.out.println(0);
continue;
case "front": // FRONT명령어
if(queue.isEmpty()){
System.out.println(-1);
}else System.out.println(queue.get(0));
continue;
case "back": // BACK명령어
if(queue.isEmpty()){
System.out.println(-1);
}else System.out.println(queue.get(queue.size()-1));
continue;
}
}
}
}
보완할 점 / 헷갈린 점
처음에는 객체로 만들어서 함수를 재사용하는 방식으로 할려고했는데 어짜피 switch문을 사용해야 될 것 같아서
if문으로 설계를 했다. 하지만 막히는 부분이 push의 경우에는 뒤에 숫자가 들어가서 인식을 못하는 경우가 있었다.
그래서 command부분을 배열로 설계하였고 split함수를 이용해서 띄어쓰기 기준으로 앞뒤로 나누어서 사용하였다.
하지만 시간초과가 났고 (아마 처음에 for문이 돌아갈때마다 Scanner로 받고 split하고 해서 시간을 잡아먹는것같다)
그래서 BufferedReader로 버퍼형식으로 빠르게 받아서 시간초과를 해결할 수 있었다.
그리고 ArrayList를 사용해서 Queue배열의 가변성을 부여했다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 17478번 : 재귀함수가 뭔가요? - JAVA [자바] (1) | 2024.01.11 |
---|---|
[백준] 10816번 : 숫자 카드 2 - JAVA [자바] (0) | 2024.01.10 |
[백준] 1920번 : 수 찾기 - JAVA [자바] (2) | 2024.01.09 |
[백준] 10820번 : 문자열 분석 - JAVA [자바] (0) | 2023.01.15 |
[백준] 2441번 : 별 찍기 - 4 - JAVA [자바] (0) | 2023.01.15 |