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로부터 선수를 한 번에 접근해서 정보를 업데이트 하는 것
'TLI > 코드카타' 카테고리의 다른 글
2024.06.06 TIL 코트카타 74번(신고 결과 받기) (0) | 2024.06.06 |
---|---|
2024.06.05 TIL 코트카타 73번(공원 산책) (0) | 2024.06.05 |
2024.06.03 TIL 코트카타 71번(개인정보 수집 유효기간) (0) | 2024.06.03 |
2024.05.31 TIL 코트카타 68번(햄버거 만들기) (0) | 2024.05.31 |
2024.05.30 TIL 코트카타 67번(둘만의 암호) (0) | 2024.05.30 |