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);
	}
}