SW Test/Programmers

[Programmers] Lv1. 달리기 경주(Kotlin)

An effort will never betray 😎 2023. 4. 11. 01:40
반응형

문제

 

 

예시

 

 

풀이

  • Hash (map)을 사용하지 않더라도 답을 구할 수는 있습니다. callings에 나온 문자열에 해당하는 index를 indexOf 함수를 이용해서 직접 찾고 이전 값과 swap을 하면 됩니다.
  • 하지만 이 경우 시간복잡도는 callings가 1,000,000 이고 players가 50,000 이여서 시간 초과가 불가피합니다.
  • 따라서 빠른 검색이 가능한 mutableMapOf 함수를 사용하여 index만 빠르게 가져온 후 value 값을 변경하면 됩니다.
  • 참고로 mutableMapOf는 LinkedHashMap을 생성하는 함수로 HashTable 형태로 구현되어 있으며 Double Linked로 Entry를 관리하여 순서도 보장됩니다.
class Solution {
    fun solution(players: Array<String>, callings: Array<String>): Array<String> {
        val map = mutableMapOf<String, Int>().apply{
            players.forEachIndexed{ index, player -> 
                put(player, index)
            }  
        }
        
        callings.forEach{
            var index = map[it]!!
            val temp = players[index-1]
            map[it] = index - 1
            map[temp] = index
            players[index-1] = players[index]
            players[index] = temp
        }
        return players
    }
}

 

 

참고

 

LinkedHashMap - Kotlin Programming Language

 

kotlinlang.org

 

반응형