티스토리 뷰

알고리즘/공부

[백준] 10828번 스택

머어하지 2018. 8. 30. 19:52

1) 생각

입력으로 주어지는 명령을 처리하는 스택을 구현하여라.


처음 생각

Java에서 제공해주는 Stack을 써서 풀어볼까 하다가 "구현하여라"라고 적혀있어서 직접 만들어 보았다.


2) 방안

1) Stack class와 inner class로 data class를 만들어서 push 명령어가 들어오면 해당 data 객체의 다음 객체로 이전 객체의 주소를 지정해준다. 코드로 보면 이해하기가 말보다 좋다.


2) Size에 대한 부분은 Stack Class의 Field 영역에 선언하여 push 명령일 때는 +1 pop 명령일 때는 -1 해줌으로서 간단히 하였다.


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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main {
    static StringBuilder sb;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();
        Stack stack = new Stack();
        int n = Integer.parseInt(br.readLine());
        for(int i=0;i<n;i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            switch(st.nextToken()) {
            case "push":
                stack.push(Integer.parseInt(st.nextToken()));
                break;
            case "pop":
                sb.append(stack.pop()+"\n");
                break;
            case "size":
                sb.append(stack.size()+"\n");
                break;
            case "empty":
                sb.append(stack.empty()+"\n");
                break;
            case "top":
                sb.append(stack.top()+"\n");
                break;
            }
        }
        System.out.println(sb);
    }
}
 
class Stack{
    private Value top = null;
    private int size;
    
    public void push(int n) {
        Value value = new Value();
        value.n = n;
        value.next = top;
        top = value;
        size++;
    }
    
    public int top() {
        if(empty()==1return -1;
        else return top.n;
    }
    
    public int pop() {
        if(empty()==1return -1;
        int n = top.n;
        top = top.next;
        size--;
        return n;
    }
    
    public int size() {
        return size;
    }
    
    public int empty() {
        return size!=0?0:1;
    }
    
    static class Value{
        private int n;
        private Value next;
    }
}
cs


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday