새소식

백준 알고리즘

[백준 문제풀기] #1874번 - 스택 수열 with Kotlin

  • -

문제 

 

😉 How to Solve 

 

입력으로 들어오는 값이 스택 안에 push 되어 있어야 pop할수 있다.
입력으로 들어오는 값들을 arr 배열에 먼저 넣어놓은 뒤,
1부터 차례대로 스택에 넣으면서 만약 입력값(arr) 0번째 배열에 있는 값이 스택에 있다면 팝하고 입력배열의 0번째 값을 다음 번째 배열로 옮겨 계속 해서 비교해간다.

이때 스택에 푸쉬해줄 때 마다 result에 +를 넣어주고,
while 조건을 만족한다면 result에 pop에 해당하는 -를 넣어준다.

스택의 모든 값들이 pop되었다면 result를 출력,  아닌경우 No를 출력한다.

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

fun main() = with(BufferedReader(InputStreamReader(System.`in`))){
    val cmd = readLine().toInt() //입력 값 
    val st = Stack<Int>() //스택 생성
    val arr = IntArray(cmd) //입력값만큼 배열 생성

    for(i in 0..cmd-1) {
        arr[i]=readLine().toInt() //배열에 들어오는 값 입력 
    }

    var idx = 0 
    val result = ArrayList<Char>() //결과 출력 배열 
    for(i in 1..cmd){ 
        st.push(i) //while문이 걸리지 않을때는 계속 push
        result.add('+') 
        while(!st.empty() && st.peek()==arr[idx]){ //스택에 맨 위 값이랑 arr에 있는 0번째와 같은 경우 
            st.pop() //pop
            result.add('-')
            idx++ //pop한 경우 다음 값이랑 비교해야하므로 idx 1 증가 
        }
    }

    if(!st.empty()) println("NO")
    else for(z in result) println(z)


}

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.