[프로그래머스] 달리기 경주 Lv.1 JavaScript
KUKJIN LEE • 4개월 전 작성
해설자가 선수의 이름을 부를 때마다, 그 선수는 바로 앞에 있는 선수를 추월합니다. 처음 시작 순서는 'players' 배열로 주어지며, 해설자가 부른 선수들의 순서는 'callings' 배열에 담겨있습니다.
문제의 목표는 경주가 끝났을 때의 선수 순서를 반환하는 'solution' 함수를 완성하는 것입니다. 경주가 끝나면, 'solution' 함수는 선수들의 최종 순서를 'players' 배열 형태로 반환해야 합니다. 이 순서는 1등 선수부터 마지막 등수의 선수까지를 나타냅니다.
function solution(players, callings) {
let result = new Map();
for(let i = 0; i < players.length; i++){
result.set(players[i], i);
}
for(let calling of callings){
const cur = result.get(calling);
if(cur > 0){
const bPlayer = players[cur - 1];
players[cur] = bPlayer; // 역전 당한 선수
players[cur-1] = calling; // 현재 선수
result.set(calling, cur-1); // 역전한 현재 선수의 키값은 -1해서 넣어주기
result.set(bPlayer, cur); // 역전 당한 선수의 키값은 현재값으로,
}
}
return players;
}
초기화:
-
result
라는Map
객체를 생성하여 선수 이름을 키(key)로, 그들의 인덱스를 값(value)으로 저장합니다.
선수 순서 변경:
-
callings
배열을 순회하며, 각 호출된 선수의 현재 인덱스를result
맵에서 가져옵니다. -
해당 선수가 첫 번째 선수가 아니면, 그 선수와 바로 앞 선수를 교체합니다.
-
맵에서 각 선수의 인덱스 값을 업데이트합니다.
결과 반환:
-
최종적으로 업데이트된
players
배열을 반환합니다.