프로그래머스 lv1 달리기 경주 kotlin

문제

배열에 달리기 순서가 있는데 특정선수가 호명될 때 앞에 선수와 바꿔주면 되는 문제이다.

풀이 (실패 - 시간초과)

fun solution(players: Array<String>, callings: Array<String>): Array<String> {        
    callings.forEach {
        when (val index = players.indexOf(it)) {
            0, -1 -> {}
            else -> {
                val temp = players[index - 1]
                players[index - 1] = players[index]
                players[index] = temp
            }
        }
    }
    
    return players
}

풀이 (성공)


fun solution(players: Array<String>, callings: Array<String>): Array<String> {

    val rankMap = mutableMapOf<String, Int>()
    players.forEachIndexed { index, s -> rankMap[s] = index }

    callings.forEachIndexed { index, s ->
        val callRank = rankMap[s] ?: 0
        val frontPlayer = players[callRank - 1]

        players[callRank - 1] = s
        players[callRank] = frontPlayer

        rankMap[s] = callRank - 1
        rankMap[frontPlayer] = callRank
    }


    return players
}


Related Posts