πŸ“ 문제 μ„€λͺ…

μŠ€νƒμ„ κ΅¬ν˜„ν•˜κ³ , μŠ€νƒμ— μ‚¬μš© λ˜λŠ” 5κ°€μ§€ μ»€λ§¨λ“œλ₯Ό κ΅¬ν˜„ν•˜λΌ.

  1. push X: μ •μˆ˜ Xλ₯Ό μŠ€νƒμ— λ„£λŠ” 연산이닀.
  2. pop: μŠ€νƒμ—μ„œ κ°€μž₯ μœ„μ— μžˆλŠ” μ •μˆ˜λ₯Ό λΉΌκ³ , κ·Έ 수λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.
  3. size: μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜μ˜ 개수λ₯Ό 좜λ ₯ν•œλ‹€.
  4. empty: μŠ€νƒμ΄ λΉ„μ–΄μžˆμœΌλ©΄ 1, μ•„λ‹ˆλ©΄ 0을 좜λ ₯ν•œλ‹€.
  5. top: μŠ€νƒμ˜ κ°€μž₯ μœ„μ— μžˆλŠ” μ •μˆ˜λ₯Ό 좜λ ₯ν•œλ‹€. λ§Œμ•½ μŠ€νƒμ— λ“€μ–΄μžˆλŠ” μ •μˆ˜κ°€ μ—†λŠ” κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€.

문제 링크


πŸ’‘ 아이디어

  • μŠ€νƒμ€ ArrayList둜 μ„ μ–Έν•œλ‹€.
  • push X μ»€λ§¨λ“œμ—λŠ” νŠΉμ • λ¬Έμžμ—΄λ‘œ μ‹œμž‘ν•˜λŠ”μ§€ ν™•μΈν•˜λŠ” startsWith ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³ , λ‹€λ₯Έ μ»€λ©˜λ“œμ—λŠ” equals ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.
  • .remove둜 pop된 값을 μ‚­μ œν•˜κ³ , .add둜 push 된 값을 μΆ”κ°€ν•œλ‹€. .isEmpty()둜 μŠ€νƒ 리슀트의 μ •μˆ˜ μ‘΄μž¬μ—¬λΆ€λ₯Ό ν™•μΈν•œλ‹€.

πŸ›  μ½”λ“œ

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        ArrayList<Integer> stack = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            String command = br.readLine();

            // [1] push
            if (command.startsWith("push")) {
                int X = Integer.parseInt(command.split(" ")[1]);
                stack.add(X);

            // [2] pop
            } else if (command.equals("pop")) {
                if (!stack.isEmpty()) {
                    System.out.println(stack.get(stack.size() - 1));
                    stack.remove(stack.size() - 1);
                } else {
                    System.out.println(-1);
                }

            // [3] size
            } else if (command.equals("size")) {
                System.out.println(stack.size());

            // [4] empty
            } else if (command.equals("empty")) {
                System.out.println(stack.isEmpty() ? 1 : 0);

            // [5] top
            } else if (command.equals("top")) {
                if (!stack.isEmpty()) {
                    System.out.println(stack.get(stack.size() - 1));
                } else {
                    System.out.println(-1);
                }
            }
        }
    }
}

⏱ μ‹œκ°„λ³΅μž‘λ„

μ»€λ§¨λ“œμ˜ 수λ₯Ό N이라 ν•  λ•Œ, 각 μ»€λ©˜λ“œλ₯Ό ν•œ λ²ˆμ”© μ²˜λ¦¬ν•˜κ³  각 연산이 O(1)μ΄λ―€λ‘œ 전체 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(N)이닀.


✏️ λŠλ‚€ 점

  • if만 λ‚˜μ—΄ν•˜λ©΄ λͺ¨λ“  쑰건을 λ‹€ κ²€μ‚¬ν•˜λ―€λ‘œ, else-if둜 λ¬Άμ–΄μ•Ό λΆˆν•„μš”ν•œ 쑰건 검사λ₯Ό 쀄여 νš¨μœ¨μ„ 높일 수 μžˆλ‹€.