본문 바로가기
코딩테스트 준비(kotlin)/자료구조

[kotlin] 백준 1874번 : 스택 수열

by 1chanhue1 2023. 8. 10.

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

 

 

풀이

package org.techtown.part0.kotlin.part2.solvedac

import java.util.*

fun main() {




    val s = Scanner(System.`in`)
    val n = s.nextInt() //입력
    var tmp = 0
    var remember_num = 0
    val stack = Stack<Int>() // 스택
    var savestr = arrayListOf<String>() //문자열 저장




    for (i in 0..n - 1) {

        tmp = s.nextInt()  // 숫자 입력 받기

        if (remember_num < tmp) { // 기억해야되는 숫자보다 입력받은 숫자가 크다면

            for (j in remember_num + 1..tmp) {  // 기억하는숫자+1 tmp까지 반복문 수행

                stack.push(j) // 스택에 넣기

                savestr.add("+") // 문자 추가

            }
            remember_num = tmp // 기억해야되는 숫자 tmp로 초기화


        } else if (stack.peek() != tmp) { // stack의 top을 peek 한 숫자와 tmp가 다르다면
            println("NO")  // 수열을 만들 수 없음
            return
        }
        stack.pop() // if 문 수행후 pop, 문자 추가
        savestr.add("-")


    }

    savestr.forEach { (println(it)) }


}