본문 바로가기
알고리즘/스택,큐,덱

[java 백준] 실버 4/ 10828번 스택

by Meaning_ 2021. 8. 20.
728x90
반응형

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Stack;
import java.util.StringTokenizer;
 
public class Main {
    public static int n;
 
    public static void main(String[] args) throws NumberFormatException, IOException {
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        Stack<Integer> stack = new Stack<Integer>();
 
        n = Integer.parseInt(br.readLine());
 
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            String s = st.nextToken();
            if (s.equals("push")) {
                int n2 = Integer.parseInt(st.nextToken());
                stack.push(n2);
 
            } else if (s.equals("top")) {
                if (stack.size() < 1) {
                    System.out.println(-1);
                } else {
                    System.out.println(stack.peek());
                }
 
            } else if (s.equals("size")) {
                System.out.println(stack.size());
            } else if (s.equals("empty")) {
                if (stack.size() < 1) {
                    System.out.println(1);
                } else {
                    System.out.println(0);
                }
            } else if (s.equals("pop")) {
                if (stack.size() < 1) {
                    System.out.println(-1);
                } else {
                    System.out.println(stack.pop());
                }
 
            }
 
        }
    }
 
}
cs

 

 

 

 

처음 쓴 코드 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
 
public class Main {
    public static int[] arr;
 
    public static int n;
    public static int k;
 
    public static void push(int n, int num, int index) {
        arr[n - index - 1= num;
    }
 
    public static void pop(int n) {
        int i = 0;
        while (true) {
            i++;
            if (arr[i] > 0) {
                System.out.println(arr[i]);
                arr[i] = 0;
                break;
            } else if (arr[n - 1== 0) {
                System.out.println(-1);
                break;
            }
        }
 
    }
 
    public static void size(int n) {
        int total = 0;
        for (int i = 0; i < n; i++) {
            if (arr[i] > 0) {
                total++;
            }
        }
        System.out.println(total);
 
    }
 
    public static void empty(int n) {
        int total = 0;
        for (int i = 0; i < n; i++) {
            if (arr[i] > 0) {
                total++;
            }
        }
        if (total == 0) {
            System.out.println(1);
        } else {
            System.out.println(0);
        }
 
    }
 
    public static void top(int n) {
        int i = 0;
        while (true) {
            
            if (arr[i] > 0) {
                System.out.println(arr[i]);
 
                break;
            } else if (arr[n - 1== 0) {
                System.out.println(-1);
                break;
            }
            i++;
 
 
        }
 
    }
 
    public static void main(String[] args) throws NumberFormatException, IOException {
        Scanner sc = new Scanner(System.in);
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        StringTokenizer st;
 
        n = Integer.parseInt(br.readLine());
        arr = new int[n];
 
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            String s = st.nextToken();
            while (st.hasMoreTokens()) {
                int k = Integer.parseInt(st.nextToken());
                push(n, k, i);
            }
            if (s.equals("top")) {
                top(n);
            } else if (s.equals("size")) {
                size(n);
            } else if (s.equals("empty")) {
                empty(n);
            } else if (s.equals("pop")) {
                pop(n);
            }
 
        }
    }
 
}
cs

 

뭔가 메서드도 만들고 어쩌구 저쩌구 썼는데 뭔가 시간초과 걸릴 것 같아 구글에 서치를 해봤고

스택 라이브러리가 있다는 것을 발견했다..!


자바 스택 라이브러리 


push() 스택에 삽입
pop() 스택에서 가장 위에 있는 값을 반환하고 없앤다
peek() 스택에서 가장 위에 있는 값 반환
isEmpty() 스택이 비어있는지 반환
size() 스택에 있는 요소 크기 반환 

<참고한 글>

https://gorani95.tistory.com/150

 

Java 라이브러리 정리

- Stack - import java.util.*; - Stack stack = new Stack<>(); - push() : 스택에 삽입 - pop() : 스택에서 가장 위에 있는 값 반환하고 없앰 - peek() : 스택에서 가장 위에 있는 값 반환 - isEmpty() : 스택이..

gorani95.tistory.com

 

728x90
반응형

댓글