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

[java 백준] 실버 3/1874번 스택수열

by Meaning_ 2021. 8. 29.
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
반응형

댓글