[BOJ 골드4] 탑 보기 22866번 Kotlin
문제
설명
- 전에 카카오 문제중에 건물 비슷한 문제가 있었는데 못푼경험이 있어 스택문제라는 것을 떠올렸다
- 풀이 과정은 크게 3단계로 나눌 수 있는데 현재 건물에서 좌측에 볼 수 있는 건물을 먼저 구하고 우측에 볼 수 있는 건물을 뒤쪽부터 순회하며 구하고 이 과정에서 가장 가까운 건물을 저장하는 것이 문제의 핵심이다.
코드
import java.lang.Math.abs
fun main() = with(System.`in`.bufferedReader()){
readLine()
val height = readLine().split(" ").map{it.toInt()}
val ans = MutableList(height.size){MutableList(2){0} }
var st = mutableListOf<Pair<Int,Int>>()
val save = MutableList(height.size){Int.MAX_VALUE}
for(i in height.indices){
while(!st.isEmpty()&&st.last().first<=height[i]){
st.removeLast()
}
ans[i][0] += st.size
if(!st.isEmpty()&&abs(i-st.last().second)<save[i]){
ans[i][1] = st.last().second+1
save[i] = abs(i-st.last().second)
}
st.add(Pair(height[i],i))
}
st.clear()
for(i in height.indices.reversed()){
while(!st.isEmpty()&&st.last().first<=height[i]){
st.removeLast()
}
ans[i][0] += st.size
if(!st.isEmpty()&&abs(i-st.last().second)<save[i]){
ans[i][1] = st.last().second+1
save[i] = abs(i-st.last().second)
}
st.add(Pair(height[i],i))
}
ans.forEach{
if(it[0]>0) {
println("${it[0]} ${it[1]}")
}
else{
println(0)
}
}
}
Author And Source
이 문제에 관하여([BOJ 골드4] 탑 보기 22866번 Kotlin), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jihoon97/BOJ-골드4-탑-보기-22866번-Kotlin저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)