728x90
https://school.programmers.co.kr/learn/courses/30/lessons/178871
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 풀이
1. 주어진 callings, players 배열을 indexOf 를 이용하여 위치를 찾아 서로 swap 을 하게 되면 시간 초과 오류가 발생한다.
2. map 의 containsKey 를 이용하여 시간초과를 해결한다.
3. 이때 (Int, String) = (순위, 선수 이름) 을 가지는 map1과 (String, Int) = (선수 이름, 순위) 을 가지는 map2 를 선언한다.
4. callings 배열을 탐색한다.
5. 현재의 calling 선수가 map2에 포함되어 있으면 calling 선수의 현재 등수를 확인한다.
6. calling 선수의 등수 - 1의 선수와 서로 swap 하여 map1, map2 에 저장한다.
7. callings 배열을 탐색 완료 한 후 map1 을 출력한다.
코드
class Solution {
fun solution(players: Array<String>, callings: Array<String>): Array<String> {
val map1 = mutableMapOf<Int, String>() // 순위, 이름으로 맵에 저장
val map2 = mutableMapOf<String, Int>() // 이름, 순위로 맵에 저장
players.forEachIndexed { index, player ->
map1[index] = player
map2[player] = index
}
callings.forEach {calling ->
if (map2.containsKey(calling)) {
// calling 의 등수 확인
val grade: Int = map2[calling]!!
//println("grade : $grade")
// 이미 1등이면 순위를 바꾸지 않는다.
if (grade != 0) {
val temp: String = map1[grade - 1]!!
map1[grade - 1] = calling
map1[grade] = temp
map2[calling] = grade - 1
map2[temp] = grade
//println("swap : ${map1[grade - 1]}, ${map1[grade]}")
}
}
}
//println(map1.values)
return map1.values.toTypedArray()
}
}
728x90
'알고리즘(w.KOTLIN) > 자료구조' 카테고리의 다른 글
[백준][KOTLIN][1406] 에디터 (0) | 2023.01.02 |
---|---|
[알고리즘][KOTLIN] 두 큐 합 같게 만들기 (0) | 2022.12.04 |
[알고리즘][KOTLIN] 택배상자 (0) | 2022.12.03 |
[알고리즘][KOTLIN] 롤케이크 자르기 (1) | 2022.12.03 |