[백준] 스택 수열 1874번 - Java

GOSHK·2022년 2월 6일
0

[백준] Java

목록 보기
10/49
post-thumbnail

[백준] 스택 수열 1874번

나의 풀이

public class StackSequence {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        List<Integer> stack = new ArrayList<>();
        List<String> symbol = new ArrayList<>();
        int idx = 1;

        for(int i = 0; i < N; i++) {
            int num = Integer.parseInt(br.readLine());

            while(idx <= num) {
                stack.add(idx);
                idx++;
                symbol.add("+");
            }

            if(stack.get(stack.size() - 1) == num) {
                stack.remove(stack.size() - 1);
                symbol.add("-");
            } else {
                break;
            }
        }

        if(stack.size() == 0) {
            symbol.stream().forEach(System.out::println);
        } else {
            System.out.println("NO");
        }
    }
}
  • 우선 스택은 FILO(First In Last Out) 구조로 처음에 들어온 인자가 제일 마지막에 나가는 구조이다. 상자 쌓기를 예로 들 수 있는데, 보통 상자를 수직으로 쌓으면 맨 처음에 쌓은 상자가 맨 밑에 깔리게 되고, 마지막에 쌓은 상자가 맨 위에 놓이게 된다. 그렇기 때문에 맨 밑에 있는 상자를 꺼내기 위해서는 맨 위에있는 상자부터 제거해 나가야 한다.
  • N개의 숫자를 받기위해 N번 만큼 반복을 돌면서 idx 가 입력받은 num 보다 작거나 같은 동안 stack 에 idx 를 추가해주고 idx 를 1씩 증가시킨다. (ex| num 이 4일 경우 stack 에는 1, 2, 3, 4 가 추가되고 idx 는 5가된다.) 그리고 symbol 에는 스택에 추가를 했으니 '+' 기호를 추가해준다.
  • 추가가 완료된 후 만약 stack 마지막에 있는 숫자와 입력 받은 num 이 같다면 해당 숫자를 stack 에서 빼주고 symbol 에 '-' 를 추가해준다.
  • stack의 마지막 숫자와 num 이 같지 않다면 스택 구조를 위반하기 때문에 반복을 종료한다.
  • stack에 숫자가 남아있지 않다면 스택 구조에 맞게 숫자를 입출력 된 것이기 때문에 기호를 한 줄씩 출력해준다. 그게 아니라면 "NO" 를 출력해준다.

0개의 댓글