[1874번] 스택 수열 ( 스택 )

Loopy·2023년 11월 22일
0

코테 문제들

목록 보기
10/113


✅ 스택

📍 선입 후출

현재 스텍에 위치한 최정상 값이 출력하고 싶은 값보다 크다면 출력 불가

👾 주의

아래 두 개의 while 문은 완전 다르므로 주의하자 !

while (num <= currentNum) {
					stack.push(num);
					num++;
					sb.append("+\n");
				}
while (num == currentNum) {
					stack.push(num);
					num++;
					sb.append("+\n");
				}

첫 번째 루프는 num 이 currentNum보다 작거나 같을 때 숫자를 스택에 추가한다.
두 번째 루프는 num 이 currentNum과 정확히 같을 때 만 수행한다.


✅ 코드

import java.util.Scanner;
import java.util.Stack;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int input = sc.nextInt();

		int arr[] = new int[input];

		for (int i = 0; i < input; i++) {
			arr[i] = sc.nextInt();
		}

		Stack<Integer> stack = new Stack<>();
		int num = 1;
		boolean result = true;
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < arr.length; i++) {
			int currentNum = arr[i];
			if (currentNum >= num) {
				while (num <= currentNum) {
					stack.push(num);
					num++;
					sb.append("+\n");
				}
				stack.pop(); // 맨 마지막 입력 값 출력
				sb.append("-\n");
			} else {
				int n = stack.pop();
				if (currentNum < n) { //작다면
					System.out.println("NO");
					result = false;
					break;
				} else { //같다면 (제일 위에 있다면)
					sb.append("-\n");
				}
			}
		}

		if (result) { // result == true
			System.out.println(sb.toString());
		}

	}
}

profile
잔망루피의 알쓸코딩

0개의 댓글