코딩테스트/JAVA

배열로 스택 구현

jeonghoe21 2025. 3. 3. 05:44
import java.io.*;

public class Main {
    
    private int index = -1; // 스택의 최상단 인덱스 (초기값: -1, 즉 스택이 비어있는 상태)
    private int[] s = new int[10000]; // 최대 크기 10000의 스택 배열

    // 🟢 push 연산: 값을 스택에 추가
    public void push(int n) {
        s[++index] = n; // index를 증가시킨 후 해당 위치에 값 저장
    }

    // 🟢 pop 연산: 스택에서 최상단 값을 제거하고 반환
    public int pop() {
        if (empty()) 
            return -1; // 스택이 비어있다면 -1 반환
        return s[index--]; // 최상단 값을 반환하고 index를 감소
    }

    // 🟢 size 연산: 스택에 있는 요소 개수 반환
    public int size() {
        return index + 1; // index는 0부터 시작하므로, 개수는 index + 1
    }

    // 🟢 empty 연산: 스택이 비었는지 여부 반환
    public boolean empty() {
        return index == -1; // index가 -1이면 스택이 비어있는 상태
    }

    // 🟢 top 연산: 스택의 최상단 값을 반환 (제거하지 않음)
    public int top() {
        if (empty())
            return -1; // 스택이 비어있다면 -1 반환
        return s[index]; // 최상단 값 반환
    }

    public static void main(String[] args) throws IOException {
        // 🟢 빠른 입출력을 위한 BufferedReader & BufferedWriter 사용
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        Main stack = new Main(); // 스택 객체 생성

        int n = Integer.parseInt(br.readLine()); // 명령어 개수 입력 받기

        for (int i = 0; i < n; i++) {
            String cmd = br.readLine(); // 한 줄 입력 받기

            // 🟢 push 연산: "push X" 형태의 입력 처리
            if (cmd.startsWith("push")) { // "push"로 시작하는 문자열 확인
                int x = Integer.parseInt(cmd.substring(5).trim()); // "push X"에서 X 값을 추출
                stack.push(x);
            }
            // 🟢 pop 연산
            else if (cmd.equals("pop")) {
                bw.write(stack.pop() + "\n");
            }
            // 🟢 size 연산
            else if (cmd.equals("size")) {
                bw.write(stack.size() + "\n");
            }
            // 🟢 empty 연산
            else if (cmd.equals("empty")) {
                bw.write((stack.empty() ? 1 : 0) + "\n");
            }
            // 🟢 top 연산
            else if (cmd.equals("top")) {
                bw.write(stack.top() + "\n");
            }
        }

        // 🟢 버퍼에 있는 내용을 모두 출력
        bw.flush();
        // 🟢 BufferedReader & BufferedWriter 닫기
        br.close();
        bw.close();
    }
}

'코딩테스트 > JAVA' 카테고리의 다른 글

배열로 큐 구현  (0) 2025.03.03
DFS, BFS  (0) 2025.03.03
요세푸스 문제  (0) 2025.03.02