Post

stack을 class로 구현

말 그대로 stack을 class로 구현하였다

🙋‍♂️ 들어가며

stack을 만들기 위해 class에 작성할 것들을 정리해보자

    1. 데이터 상태 정의
    1. 생성자
    1. push
    1. pop
    1. peek
    1. isEmpty
    1. size


✅ 정답 코드 (stack)

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
package joonhwan_k;

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

// test
import java.util.Arrays;


public class Solution {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int[] price = new int[] {1,3,2,3,6,4,5,2,1};
		int N = price.length;
		
		// 1. stack 생성
		my_stack stack = new my_stack(N);
		System.out.println(stack.top);
		stack.push(123);
		System.out.println(stack.top);
		System.out.println(stack.peek());
		stack.push(145);
		System.out.println(stack.top);
		System.out.println(stack.pop());
		System.out.println(stack.top);
		stack.push(999);
		System.out.println(stack.size());
		System.out.println(stack.isEmpty());
	}
	
	
	
	// 3. stack 클래스
	static class my_stack {
		
		// 3-1. 데이터 상태 정의
		private int top;
		private int[] stack;
		
		// 3-2. 생성자
		my_stack(int size) {
			top = -1;
			stack = new int[size];
		}
		
		// 3-3. push
		void push(int value) {
			top++;
			stack[top] = value;
		}
		
		// 3-4. pop
		int pop() {
			int value = stack[top];
			top--;
			return value;
		}
		
		// 3-5. peek
		int peek() {
			int value = stack[top];
			return value;
		}
		
		// 3-6. isEmpty
		boolean isEmpty() {
			if (top != -1) return false;
			return true;
		}
		
		// 3-7. size
		int size() {
			return top + 1;
		}
				
		
	}

}




출력 값

1
2
3
4
5
6
7
8
-1
0
123
1
145
0
2
false




이제부터 단조스택에 대해 보자

단조스택은 스택에 오름차순으로 남아있거나, 내림차순으로 정렬되어있는 것을 의미한다.

아래는 단조스택의 오름차순 코드다

✅ 정답 코드 (monotonic_stack - asc)

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
package joonhwan_k;

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

// test
import java.util.Arrays;


public class Solution {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int[] price = new int[] {5, 3, 7, 2, 6};
		int N = price.length;
		
		// 1. stack 생성
		my_stack stack = new my_stack(N);
		
		// 2. 단조스택 검사 (점차 증가?)
		for (int i = 0; i < N; i++) {
			
			// 2-1. 스택이 비지 않았고 && 스택의 마지막값 > 현재값이면
			while (!stack.isEmpty() && stack.peek() > price[i]) {
				System.out.println(stack.peek());
				stack.pop();
			}
			
			// 2-2. stack에 push
			stack.push(price[i]);
		}
		
		
		// 3. 스택(오름차순) 출력
		int[] res = new int[stack.size()];
		for (int i = res.length-1 ; i >= 0; i--) {
			res[i] = stack.pop();
		}
		System.out.println(Arrays.toString(res));
		
		
	}
	
	
	
	// 3. stack 클래스
	static class my_stack {
		
		// 3-1. 데이터 상태 정의
		private int top;
		private int[] stack;
		
		// 3-2. 생성자
		my_stack(int size) {
			top = -1;
			stack = new int[size];
		}
		
		// 3-3. push
		void push(int value) {
			top++;
			stack[top] = value;
		}
		
		// 3-4. pop
		int pop() {
			int value = stack[top];
			top--;
			return value;
		}
		
		// 3-5. peek
		int peek() {
			int value = stack[top];
			return value;
		}
		
		// 3-6. isEmpty
		boolean isEmpty() {
			if (top != -1) return false;
			return true;
		}
		
		// 3-7. size
		int size() {
			return top + 1;
		}
				
		
	}
}




출력 값

1
2
3
4
5
7
3
[2, 6]
This post is licensed under CC BY 4.0 by the author.

Trending Tags

반갑습니다 무엇을 도와드릴까요?