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

 

[난이도] Silver3
[유형] 스택

[풀이]
1~n 순서로 무조건 push해야 하므로 for문을 돌면서 일단 push해주고
만약 top이 현재 나와야 하는 수열 값이라면 while문을 돌면서 pop을 해준다.
만약 위 과정을 마치고 스택이 비어있지 않다면 수열을 만들 수 없는 경우이다.

복잡하게 조건을 생각하면서 풀려고 하면 어렵기 때문에 스택의 empty 유무로 판단해야 한다.

 

import java.io.BufferedReader
import java.io.InputStreamReader
import java.util.*
import kotlin.collections.ArrayList

fun main() = with(BufferedReader(InputStreamReader(System.`in`))){
    var n = readLine().toInt()
    val st = Stack<Int>()
    val arr = IntArray(n)
    for(i in 0..n-1) arr[i]=readLine().toInt()
    var idx=0;
    var ans=ArrayList<Char>()
    for(i in 1..n){
        st.push(i)
        ans.add('+')
        while(!st.empty() && st.peek()==arr[idx]){
            st.pop()
            ans.add('-')
            idx++
        }
    }
    if(!st.empty()) println("NO")
    else for(c in ans) println(c)
}


https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Silver3/1874.cpp

+ Recent posts