본문 바로가기

연습문제/JAVA

[백준 java] 10828 - 스택

 

10828번: 스택

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

 

제한시간이 0.5초라 Scanner와 System.out.print로 입출력을 구현하면 바로 시간초과에 걸린다

 

블로그 - 전체 글

여러가지 언어와 입력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일

www.acmicpc.net

위 블로그에서 입력속도 비교글을 한눈에 볼 수 있다.

BufferReader로 입력을받고 "push 정수" 를 스페이스바로 구분하기위해 StringTokenizer를 사용하였다

출력은 StringBuilder에 출력값을 더하고 줄바꿈을 하여 마지막에 출력하였다

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

//스택
//https://www.acmicpc.net/problem/10828

public class B10828 {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();


        int N = Integer.parseInt(bf.readLine());
        Stack<Integer> stack = new Stack<>();

        for(int i=0; i<N; i++){
            st = new StringTokenizer(bf.readLine(), " ");
            String str = st.nextToken();

            if(Objects.equals(str, "push")){
                stack.push(Integer.parseInt(st.nextToken()));
            }else if(Objects.equals(str, "pop")){
                if(stack.size()<1)  sb.append(-1).append('\n');
                else {
                    sb.append(stack.pop()).append('\n');
                }
            }else if(Objects.equals(str, "size")){
                sb.append(stack.size()).append('\n');
            }else if(Objects.equals(str, "empty")){
                if(stack.empty()) sb.append(1).append('\n');
                else sb.append(0).append('\n');
            }else if(Objects.equals(str, "top")){
                if(stack.size()<1) sb.append(-1).append('\n');
                else sb.append(stack.peek()).append('\n');
            }
        }
        System.out.println(sb);
    }
}

'연습문제 > JAVA' 카테고리의 다른 글

[백준 java] 1068 - 트리  (0) 2022.08.27
[백준 java] 10845 - 큐  (0) 2022.08.26
[백준 java] 9935 - 문자열 폭발  (0) 2022.08.25
[백준 java] 1717 - 집합의 표현 (Union-find)  (0) 2022.08.25
1717-집합의 표현 (오답)  (0) 2022.08.24