[10828] 스택 | 백준 실버 4

yoongyum·2022년 4월 11일
0

코딩테스트 🧩

목록 보기
9/47
post-thumbnail

🔎 문제설명

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

push X: 정수 X를 스택에 넣는 연산이다.

pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

size: 스택에 들어있는 정수의 개수를 출력한다.

empty: 스택이 비어있으면 1, 아니면 0을 출력한다.

top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

입력

첫째 줄에 주어지는 명령의 수 N 이 주어진다.
둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다.
(문제에 나와있지 않은 명령이 주어지는 경우는 없다.)

출력

출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.

제한사항

  • 1 ≤ N ≤ 10,000
  • 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다.


🧪 자바 코드

public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        Stack<Integer> stack = new Stack<>();   //스택
        
        // N (1 ≤ N ≤ 10,000)
        int N = Integer.parseInt(br.readLine());   //명령어의 수
        
		//명령어수 만큼 반복
        while( 0 < N--){
            String[] cmd = br.readLine().split(" ");
            switch (cmd[0]){

				//push X: 정수 X를 스택에 넣는 연산이다.
                case "push":    
                    stack.add(Integer.parseInt(cmd[1]));    //cmd[1] = X
                    break;

				//pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 
                case "pop":  
					//만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.   
                    if(stack.empty()) {
                        bw.write("-1\n");
                        break;
                    }
                    Integer ret = stack.pop();
                    bw.write(ret.toString()+"\n");
                    break;

				//size: 스택에 들어있는 정수의 개수를 출력한다.
                case "size": 
                    Integer size = stack.size();
                    bw.write(size.toString()+"\n");
                    break;

				//empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
                case "empty": 
                    bw.write((stack.empty() ? "1" : "0") + "\n");
                    break;

				//top: 스택의 가장 위에 있는 정수를 출력한다. 
                case "top":     
					//만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
                    if(stack.empty()) {
                        bw.write("-1\n");
                        break;
                    }
                    bw.write(stack.peek().toString()+"\n");
                    break;

                default:
                    break;

            }

        }
        bw.flush();
        bw.close();
    }

스택알고리즘에 대한 문제보단, 입출력 문제로 시간초과나는 경우가 많습니다.

0개의 댓글