01. 이해
배열의 각 아이템 별로 자신보다 인덱스가 작은 아이템들 중
자신보다 값이 크고 인덱스가 가장 큰 아이템의 인덱스 +1을 배열로 반환.
자신보다 값이 큰 인덱스가 없을 경우 0을 배열로 반환.
02. 계획
입력 받은 배열을 차례대로 돌면서 자신 보다 인덱스가 작은 아이템들을 스택에다 넣고
하나씩 꺼내서 자신보다 큰 값을 가진 아이템을 찾고 그 아이템의 인덱스 + 1을 배열에 삽입.
만약 자신 보다 큰 값을 가진 아이템을 끝까지 찾을 수 없으면 0을 배열에 삽입.
03. 실행
fun solution(heights: IntArray): IntArray {
val answer = mutableListOf<Int>()
heights.forEachIndexed { index, i ->
if (index==0){
answer.add(0)
}else {
val towersOfLeft = heights.copyOfRange(0,index)
val value = towersOfLeft.findLast {
it > i
}
if (value == null){
answer.add(0)
}else{
answer.add(towersOfLeft.lastIndexOf(value)+ 1)
}
}
}
return answer.toIntArray()
}
04. 회고
문제 카테고리가 스택/큐 라서 스택으로 풀어보려고 했는데 코틀린의 컬렉션 함수를
이용해서 푸는 것도 괜찮겠다 싶어서 findLast와 lastIndexOf를 사용해 봤다.
2단계 첫 문제인데 생각보다 쉬웠다.