코딩 테스트 연습 - 탑

다용도리모콘·2020년 6월 28일
0

CodingTest

목록 보기
17/34

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단계 첫 문제인데 생각보다 쉬웠다.

0개의 댓글