스택 수열 (백준 1874번)

박영준·2023년 5월 23일
0

코딩테스트

목록 보기
144/300

메모

/*
1 ~ n 까지의 수를 스택에 넣었다가 뽑아 늘어놓음으로써, 하나의 수열을 만들 수 있다. 
	스택에 push하는 순서 : 반드시 오름차순
	push연산은 +로, pop 연산은 -로 표현
    불가능한 경우 NO를 출력
    
임의의 수열이 주어졌을 때
스택을 이용해 그 수열을 만들 수 있는지 없는지?
있다면 어떤 순서로 push와 pop 연산을 수행해야 하는지?
*/

해결법

방법 1

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());		// value : 입력받은 값
			
            // push 할 경우
			if (value > start) {
				for (int i = start + 1; i <= value; i++) {		// start + 1부터 입력받은 value 까지 push 한다
					stack.push(i);
					sb.append('+').append('\n');		// + 를 저장
				}
				start = value; 	// 다음 push 할 때의 오름차순을 유지하기 위한 변수 초기화 (이전까지 push 받은 가장 최근 값으로)
            
            // NO 할 경우
			} else if (stack.peek() != value) {		// top에 있는 원소가 입력받은 값과 같지 않은 경우  
				System.out.println("NO");
				return;
			}
			
            // pop 할 경우
			stack.pop();		// start ~ value 까지 push 돼있다면, pop을 한다
			sb.append('-').append('\n');
			
		}
		
		System.out.println(sb);
	}
}

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


스택 수열 (백준 1874번)

profile
개발자로 거듭나기!

0개의 댓글