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)) }
}
'코딩테스트 준비(kotlin) > 자료구조' 카테고리의 다른 글
[kotlin, 프로그래머스] 베스트앨범 (0) | 2024.07.31 |
---|---|
[프로그래머스 kotlin] 다리를 지나는 트럭 (0) | 2024.07.09 |
[프로그래머스 kotlin] 롤케이크 자르기 (0) | 2024.07.01 |
[프로그래머스 kotlin] 기능개발 (0) | 2024.06.23 |
[프로그래머스 kotlin] 괄호 회전하기 (0) | 2024.06.18 |