본문 바로가기
코딩테스트

백준 10828번 스택

by dyddyd0 2024. 6. 30.

스택 구현문제를 풀어보았다.

자바에는 Stack stack = new Stack <>()을 선언해서 사용할 수 있지만,

스택 자체를 공부하기에는 직접 구현하는 것이 도움이 될 것 같아서

문제 요구사항대로 스택을 구현했다.


스택은 쌓인다 라는 의미로, 먼저 들어온 것이 마지막에 나가고,
마지막에 들어온 것이 먼저 나가게 되는 LIFO(Last In First Out) 구조이다.

추가로 큐 자료구조는 FIFO(First In Last Out).


 

전체코드는 문제의 요구사항대로 구현했다.

다음 코드는 세 번의 제출 중 가장 깔끔하다 생각하는 세 번째 제출 코드이다.

 

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

public class Main {

    private static int size = 0;
    private static int[] stack = new int[10000];

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int N = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            String input = st.nextToken();

            switch (input){

                case "push" :
                    push(Integer.parseInt(st.nextToken()));
                    break;

                case "pop" :
                    sb.append(pop()).append('\n');
                    break;

                case "size" :
                    sb.append(size()).append('\n');
                    break;

                case "empty" :
                    sb.append(empty()).append('\n');
                    break;

                case "top" :
                    sb.append(top()).append('\n');
                    break;

                default : break;
            }

        }
        br.close();
        bw.write(sb.toString());
        bw.flush();
        bw.close();

    }


    public static void push(int n){
        stack[size++] = n;
    }

    public static int pop(){
        if (size == 0)
            return -1;
        else
            return stack[--size];
    }

    public static int size(){
        return size;
    }

    public static int empty(){
        if (size == 0)
            return 1;
        else
            return 0;
    }

    public static int top(){
        if (size == 0)
            return -1;
        else
            return stack[size-1];
    }

}                                     

 

 

시간 단축을 할 방법을 찾으며 제출은 총 세 번 했다.

맨 아래 제출: 1번, 가운데 제출: 2번, 맨 위 제출: 3번

 

 

첫 번째 제출 (왼쪽)
import java.io.*;
import java.util.StringTokenizer; 두 개의 임포트를 해주고,

top()과 pop() 메서드 else 부분을 {} 괄호로 묶어주어 제출했다.

 

세 번째 제출 (오른쪽)

두 개의 임포트와 메서드의 else부분의 {} 괄호를 빼고 제출했다.

 

제출 1 : 172ms , 제출 3 : 168ms

 

 

아래의 두 번째 제출에서는

다음과 같이 하나하나 임포트를 해주었고,

추가로 괄호와 공백정리도 해주었다.

제출 2 : 152ms

 

java.io를 묶어 임포트 하고, 괄호 공백 정리를 안 한

1번 제출보다
괄호와 공백을 정리 한

3번 제출이 속도가 빠르고,

사용하는 클래스만 임포트 하고 공백 괄호 정리를 해준

2번 제출의 속도가 빠른 걸 확인할 수 있었다.

반응형

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

프로그래머스 문자열 잘라서 정렬하기  (1) 2024.08.31
백준 10845번 큐  (0) 2024.07.05
백준 11720번 숫자의 합  (0) 2024.06.19