문제
문제 링크 : https://www.acmicpc.net/problem/10828
수도코드 작성
주어진 명령어 그대로 if문으로 구현하면 될 것 같았다.
3가지로 작성을 해보았다.
1. Scanner 이용 (시간초과)
2. BufferedReader + System.out.printf 이용 (코드가 제일 짧음)
3. BufferedReader + BufferedWriter 이용
작성한 코드
1. Scanner 이용
import java.io.*;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> queue = new ArrayList<>();
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=0; i<N; i++){
String command = sc.next();
if ("push".equals(command)) {
queue.add(sc.nextInt());
}
if ("top".equals(command)){
if(queue.size()==0){
System.out.println(-1);
}else {
System.out.println(queue.get(queue.size() - 1));
}
}
if ("size".equals(command)){
System.out.println(queue.size());
}
if ("empty".equals(command)){
if(queue.size()==0){
System.out.println(1);
}
else{
System.out.println(0);
}
}
if("pop".equals(command)){
if(queue.size()==0){
System.out.println(-1);
}
else {
int A = queue.get(queue.size()-1);
queue.remove(queue.size()-1);
System.out.println(A);
}
}
}
}
}
2. BufferedReader + System.out.printf 이용
import java.io.*;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Integer> queue = new ArrayList<>();
int N = Integer.parseInt(bf.readLine());
for(int i=0; i<N; i++){
String[] command = bf.readLine().split(" ");
if ("push".equals(command[0])) {
queue.add(Integer.parseInt(command[1]));
}
if ("top".equals(command[0])){
if(queue.size()==0){
System.out.println(-1);
}else {
System.out.println(queue.get(queue.size() - 1));
}
}
if ("size".equals(command[0])){
System.out.println(queue.size());
}
if ("empty".equals(command[0])){
if(queue.size()==0){
System.out.println(1);
}
else{
System.out.println(0);
}
}
if("pop".equals(command[0])){
if(queue.size()==0){
System.out.println(-1);
}
else {
int A = queue.get(queue.size()-1);
queue.remove(queue.size()-1);
System.out.println(A);
}
}
}
}
}
3. BufferedReader + BufferedWriter 이용
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
ArrayList<Integer> queue = new ArrayList<>();
int N = Integer.parseInt(bf.readLine());
for(int i=0; i<N; i++){
String[] command = bf.readLine().split(" ");
if ("push".equals(command[0])) {
queue.add(Integer.parseInt(command[1]));
}
if ("top".equals(command[0])){
if(queue.size()==0){
bw.write("-1");
}else {
bw.write(Integer.toString(queue.get(queue.size() - 1)));
}
bw.newLine();
bw.flush();
}
if ("size".equals(command[0])){
bw.write(Integer.toString(queue.size()));
bw.newLine();
bw.flush();
}
if ("empty".equals(command[0])){
if(queue.size()==0){
bw.write("1");
}
else{
bw.write("0");
}
bw.newLine();
bw.flush();
}
if("pop".equals(command[0])){
if(queue.size()==0){
bw.write("-1");
}
else {
int A = queue.get(queue.size()-1);
queue.remove(queue.size()-1);
bw.write(Integer.toString(A));
}
bw.newLine();
bw.flush();
}
}
bw.close();
}
}
보완할 점 / 헷갈린 점
처음에 스캐너로 했을 때 시간초과가 떠서 결국에는 BufferedReader을 사용하는 법을 공부를 했다.
출력을 BufferedWriter로 하는 게 좋다고 해서 하는데 자꾸 이상한 출력이 나와서 알아보니까 int형이여서 출력이 안되는 것이였다. 그래서 Integer.toString을 사용해서 모든 int들을 String으로 바꾸고 BufferedWriter을 사용하였다.
빠른 시일 내에 BufferedReader, BufferedWriter 도 블로깅을 해둬야겠다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 18258번 : 큐2 - JAVA [자바] (0) | 2022.06.15 |
---|---|
[백준] 2164번 : 카드2 - JAVA [자바] (0) | 2022.06.14 |
[백준] 1037번 : 약수 - JAVA [자바] (0) | 2022.06.09 |
[백준] 1712번 : 손익분기점 - JAVA [자바] (0) | 2022.06.07 |
[백준] 1152번 : 단어의 개수 - JAVA [자바] (0) | 2022.06.07 |