[JS] Programmers 178871 달리기 경주

서연주·2023년 7월 11일
0

Algorithm

목록 보기
20/25

썸네일_제목은 PRGM 178871 달리기 경주, 부제목은 JavaScript, 분류는 Algorithm

'달리기 경주'

Programmers '달리기 경주' 문제 보러가기

풀이 코드

매번 배열을 순회하면서 등수를 찾으면 시간 초과가 발생한다.(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;
}

참고 자료

profile
pizz@ttang

0개의 댓글