본문 바로가기

백준

[백준] 스택 10828번

728x90

코드 힌트

Stack 사용하기

  • Stack은 LIFO(Last In, First Out) 구조로, 나중에 들어온 데이터가 먼저 나가는 방식입니다. 스택을 사용하면 데이터를 추가(push), 제거(pop), 확인(peek)할 수 있습니다.

push 명령어 처리하기

  • push 명령어가 입력되면, 스택에 새로운 값을 추가해야 합니다. 명령어에 따라 입력된 값을 스택에 넣습니다.

top 명령어 처리하기

  • top 명령어가 입력되면, 스택의 가장 위에 있는 값을 확인합니다. 스택이 비어 있지 않은 경우에만 이 명령어를 처리하며, 가장 위의 값을 반환합니다.

size 명령어 처리하기

  • size 명령어가 입력되면, 현재 스택에 저장된 요소의 개수를 반환합니다. 이 개수를 반환하여 출력합니다.

empty 명령어 처리하기

  • empty 명령어가 입력되면, 스택이 비어 있는지 여부를 확인합니다. 비어 있다면 1, 비어 있지 않다면 0을 반환합니다.

pop 명령어 처리하기

  • pop 명령어가 입력되면, 스택의 가장 위에 있는 값을 꺼내어 반환합니다. 이 명령어는 스택이 비어 있지 않은 경우에만 처리됩니다.

예외 처리하기

  • 스택이 비어 있을 때 top이나 pop 명령어가 호출되면, "-1"을 반환합니다. 이 경우, 명령어를 처리하기 전에 스택이 비어 있는지 확인합니다.

 

 


정답은 더보기 클릭

더보기
import java.io.*;
import java.util.*;

public class Main {
	public static void main(String[] args) throws NumberFormatException, IOException {
		// BufferedReader와 BufferedWriter를 사용해 입출력 처리
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 입력받을 명령어의 수
        int n = Integer.parseInt(br.readLine());
        
        // Stack 자료구조 선언
        Stack<String> stack = new Stack<>();
        
        // 명령어 개수만큼 반복
        for (int i = 0; i < n; i++) {
        	// 명령어를 공백 기준으로 나눔
        	String[] commond = br.readLine().split(" ");
        	
        	// "push" 명령어 처리
        	if (commond[0].equals("push")) {
        		stack.push(commond[1]); // 스택에 값 추가
        	}
        	// "top" 명령어 처리 (스택이 비어 있지 않을 때만)
        	else if (!stack.isEmpty() && commond[0].equals("top")) {
        		bw.write(stack.peek() + "\n"); // 스택의 최상위 값 확인
        	}
        	// "size" 명령어 처리
        	else if (commond[0].equals("size")) {
        		bw.write(stack.size() + "\n"); // 스택의 크기 출력
        	}
        	// "empty" 명령어 처리
        	else if (commond[0].equals("empty")) {
        		if (stack.isEmpty()) {
        			bw.write("1\n"); // 스택이 비어 있으면 1 출력
        		} else {
        			bw.write("0\n"); // 스택이 비어 있지 않으면 0 출력
        		}
        	}
        	// "pop" 명령어 처리 (스택이 비어 있지 않을 때만)
        	else if (!stack.isEmpty() && commond[0].equals("pop")) {
        		bw.write(stack.pop() + "\n"); // 스택의 최상위 값 제거 및 출력
        	}
        	// 그 외의 경우, "-1" 출력 (스택이 비어 있을 때 "top"이나 "pop" 명령어가 호출될 때)
        	else {
        		bw.write("-1\n");
        	}
        }
        
        // BufferedWriter의 남은 데이터를 출력
        bw.flush();
        bw.close();
    }
}
728x90

'백준' 카테고리의 다른 글

[백준] 나이순 정렬 (10814번)  (0) 2024.08.17
[백준] 터렛 (1002번)  (0) 2024.08.16
[백준] 별 찍기 - 3 (2440번)  (0) 2024.08.15
[백준] 피보나치 수 5 (10870번)  (0) 2024.08.15
[백준] ACM 호텔 (10250번)  (0) 2024.08.15