ALGORITHM
백준 10828 스택 (Java)
공부하는_다온
2023. 1. 14. 22:00
1. 문제 링크
10828번: 스택
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
2. 문제 및 입출력 예제
3. 문제 풀이
스택 자료구조를 알고 있다면 그대로 코드로 적으면 된다.
근데 왜 이렇게 많이 틀렸냐면...
pop 에서 arr.remove(size-1);를 두번 반복해서 했기 때문이었다!
이걸 바로 봤으면 한 번 틀렸습니다였겠지만 출력 조건만 보고
어라 System.out.println()으로 고쳐야 하나 싶어서 시도를 해봤기 때문..이다...
흑 이런 실수 다시 안 하려고 글로 남긴다.
4. 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
String temp = br.readLine();
int n = Integer.parseInt(temp);
ArrayList<String> arr = new ArrayList<>();
for(int i=0;i<n;i++) { //n번 반복
temp = br.readLine();
String[] str = new String[2];
str = temp.split(" ");
int size = arr.size();
if(str[0].equals("push")) {
arr.add(str[1]);
}
else if(str[0].equals("pop")) {
if(size!=0) {
sb.append(arr.get(size-1)+"\n");
arr.remove(size-1);
}
else {
sb.append("-1\n");
}
}
else if(str[0].equals("size")) {
sb.append(size+"\n");
}
else if(str[0].equals("empty")) {
if(size==0) {
sb.append("1\n");
}
else {
sb.append("0\n");
}
}
else if(str[0].equals("top")){
if(size!=0) {
sb.append(arr.get(size-1)+"\n");
}
else {
sb.append("-1\n");
}
}
}
System.out.println(sb);
}
}