TLI/코드카타
2024.06.04 TIL 코트카타 72번(달리기 경주)
jaeseonyoo
2024. 6. 4. 23:21
fun solution(players: Array<String>, callings: Array<String>): Array<String> {
val playerToRank = mutableMapOf<String, Int>()
val rankToPlayer = mutableMapOf<Int, String>()
for(playersIndex in players.indices) {
playerToRank[players[playersIndex]] = playersIndex
rankToPlayer[playersIndex] = players[playersIndex]
}
for(calling in callings) {
val callingPlayerRank = playerToRank[calling]!!
playerToRank[calling] = callingPlayerRank - 1
val beforePlayer = rankToPlayer[callingPlayerRank - 1]!!
playerToRank[beforePlayer] = callingPlayerRank
rankToPlayer[callingPlayerRank-1] = calling
rankToPlayer[callingPlayerRank] = beforePlayer
}
val answer = Array(players.size) {""}
val playerIterator = rankToPlayer.entries.iterator()
while (playerIterator.hasNext()) {
val player = playerIterator.next()
answer[player.key] = player.value
}
return answer
}
풀이 과정
1. map 2개 생성
- playerToRank(key:player / value:rank)
- rankToPlayer(key:rank / value:player)
2. 호출된 이름(calling)된 선수의 rank확인
3. map (rankToPlayer) 에서 rank-1 값으로 앞에 있는 선수 이름 확인
4. 두 선수의 rank 갱신(두 map 모두)
5. 최종 결과물을 iterator로 배열에 초기화
포인트
- map을 두 개 써서 선수로부터 rank, rank로부터 선수를 한 번에 접근해서 정보를 업데이트 하는 것