본문 바로가기

알고리즘/스택

자바 | 백준 | 1874 | 스택 수열 | intValue()

Solution

불가능한 경우: 스택의 peek()값이 큐의 peek() 값 보다 클 때

 

queue의 Integer값과 stk의 Integer값의 범위가 -128~127이 아닐 때, 비교 연산이 불가능하다. 

intValue() - Returns the value of this Integer as an int.

→ stk.peek().intValue(), queue.peek().intValue() 

// 1874, 스택 수열
package BOJ;

import java.io.*;
import java.util.*;

public class BOJ_1874 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

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

		Queue<Integer> queue = new LinkedList<>();
		Stack<Integer> stk = new Stack<>();

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

		int n = 0;
		int cnt = 0;
		while (cnt != N) {
			stk.push(++n);
			sb.append("+").append("\n");
			while (!stk.isEmpty() && stk.peek().intValue() == queue.peek().intValue()) {
				stk.pop();
				queue.poll();
				sb.append("-").append("\n");
				cnt++;
			}

			if ((!stk.isEmpty()) && stk.peek().intValue() > queue.peek().intValue()) {
				break;
			}
		}
        
		if (!stk.isEmpty()) {
			System.out.println("NO");
			return;
		}
		System.out.println(sb);

	}

}

 

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