728x90
반응형
https://www.acmicpc.net/problem/1874
1874번: 스택 수열
1부터 n까지에 수에 대해 차례로 [push, push, push, push, pop, pop, push, push, pop, push, push, pop, pop, pop, pop, pop] 연산을 수행하면 수열 [4, 3, 6, 8, 7, 5, 2, 1]을 얻을 수 있다.
www.acmicpc.net
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
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Stack;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Stack<Integer> stack = new Stack<>();
ArrayList<String> arr = new ArrayList<>();
int num = Integer.parseInt(br.readLine());
int result = 0;
stack.push(result);
for (int i = 1; i <= num; i++) {
int n = Integer.parseInt(br.readLine());
while (stack.peek() < n) {
result++;
stack.push(result);
arr.add("+");
if (stack.peek() == n) {
break;
}
}
if (stack.peek() == n) {
arr.add("-");
stack.pop();
}
if (stack.peek() > n) {
arr.clear();
arr.add("NO");
break;
}
}
for (int i = 0; i < arr.size(); i++) {
System.out.println(arr.get(i));
}
}
}
|
cs |
처음에 문제를 이해하는데 애를 먹었다. 그래서 https://st-lab.tistory.com/182 님 블로그에서 생각하는 아이디어를 참고하고 코드를 짜봤다.
<풀이 설명>
숫자를 쌓아놓는 스택 stack과 + - 를 저장해놓는 배열 arr를 만들 것이다.
입력받는 수들의 개수가 8이고 4 3 6 8 7 5 2 1이 들어온다.
처음에 들어오는 수는 4인데 stack에는 숫자가 0밖에 없다.
그러면 stack.peek()가 4가될때까지 1부터 4까지 차례대로 stack에 넣어준다.

stack.peek()와 4가 같기 때문에 pop을 해주면서 arr에 -가 추가되고, stack에는 숫자가 0,1,2,3이 남는다.
이런 규칙으로 stack과 arr이 만들어진다. 7부터 1까지는 어차피 다 - 이므로 생략하겠다.
728x90
반응형
'알고리즘 > 스택,큐,덱' 카테고리의 다른 글
[java 백준] 실버 4/ 10866번 덱 (0) | 2021.08.29 |
---|---|
[java 백준] 실버 4/10845번 큐 (0) | 2021.08.29 |
[Queue개념] Queue/원형 Queue (0) | 2021.08.29 |
[java 백준] 실버 3/ 10799번 쇠막대기 (0) | 2021.08.26 |
[java 백준] 실버 4/ 10828번 스택 (0) | 2021.08.20 |
댓글