코딩테스트/자바 문제풀이

[자료구조] 백준 1874 스택 수열

승요나라 2024. 7. 19. 23:41

1874번: 스택 수열

https://www.acmicpc.net/problem/1874

 

# 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder(); // 출력할 결과물 저장

        Stack<Integer> stack = new Stack<>();

        int N = Integer.parseInt(br.readLine());

        int start = 0;

        // N 번 반복
        while(N -- > 0) {
            int value = Integer.parseInt(br.readLine());

            if(value > start) {
                // start + 1부터 입력받은 value 까지 push를 한다.
                for(int i = start + 1; i <= value; i++) {
                    stack.push(i);
                    sb.append('+').append('\n');    // + 를 저장한다.
                }
                start = value;  // 다음 push 할 때의 오름차순을 유지하기 위한 변수 초기화
            }

            // top에 있는 원소가 입력받은 값과 같지 않은 경우
            else if(stack.peek() != value) {
                System.out.println("NO");
                return;    // 또는 System.exit(0); 으로 대체해도 됨.
            }

            stack.pop();
            sb.append('-').append('\n');
        }

        System.out.println(sb);
    }
}
  • BufferedReader  StringBuilder 를 사용한 풀이 방법이다.
  • 자료구조로는 Stack 을 사용하며, StringBuilder 에 문자열을 쌓다가 반복문이 정상적으로 끝나면 문자열을 한 번에 출력하고, 해당 수열을 만들 수 없는 경우 "NO" 를 출력하며 프로그램을 종료시킨다.
  • start 변수는 오름차순으로 어느 숫자까지 push 했는지를 체크하기 위한 변수이다.

 

문제 이해와 코드는 아래 블로그를 참고했다.

 

[백준] 1874번 : 스택 수열 - JAVA [자바]

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]을 얻을 수 있

st-lab.tistory.com