매번 배열을 순회하면서 등수를 찾으면 시간 초과가 발생한다.(indexOf()
를 사용해서 players
배열을 통해 등수 탐색 시 시간 초과 발생)
그러므로 객체에 각 선수별 현재 등수를 저장해서 빠르게 선수 별 등수를 탐색할 수 있게 했다.
그후, callings 배열을 순회하면서 이름이 불린 선수의 등수와 그 앞 선수를 찾고, 위치를 교환해주며 최종 결과를 출력했다.
function solution(players, callings) {
var rankings = {};
// 현재 선수 별 등수를 기록한다.
players.forEach((player,i)=>{
rankings[player] = i;
});
callings.forEach((calling)=>{
// 이름 불린 선수의 등수와 앞지를 선수를 찾는다.
const rank = rankings[calling];
let target = players[rank-1];
// 선수끼리 위치를 교환한다.
rankings[calling] -=1;
rankings[target] +=1;
players[rank] = target;
players[rank-1] = calling;
});
return players;
}