본문 바로가기
Algorithm and PS/백준(Kotlin)

백준 - 1874 스택 수열 (코틀린)

by ESHC 2021. 5. 26.

[문제]

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

[코드]

import java.io.*
import java.lang.StringBuilder
import java.util.*

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val bw = BufferedWriter(OutputStreamWriter(System.out))
    val n = br.readLine().toInt()
    val sb = StringBuilder()
    val stack = Stack<Int>()
    var cur = 1
    for(i in 0 until n) {
        val cmd = br.readLine().toInt()
        while(cur<=cmd){
            stack.push(cur)
            sb.append("+\n")
            cur += 1
        }
        if (cmd == stack.last()) {
            stack.pop()
            sb.append("-\n")
        }
        else {
            println("NO")
            return

        }
    }
    bw.write(sb.toString())
    bw.flush()
    bw.close()
}

[풀이]

cur을 통해 1부터 입력값까지 증가하는 연산을 보여준다.

처음 4를 입력받으면 1부터 4까지 네 번의 +연산이 필요하므로 while 문을 통해 cur가 4가 될 때까지 

출력값에 +를 추가하다가 4가 되면 - 연산을 추가하여 값을 뽑아낸다.

입력값이 cur보다 작을 때 스택의 최상단이 입력값과 같으면 -연산을 하지만

같지 않으면 NO를 출력하여 끝낸다.

Github : https://github.com/eshc123/2021AlgorithmStudy/blob/main/src/main/PS/baekjoon/1874.kt

댓글