본문 바로가기

JS/코딩테스트

JS) 프로그래머스 코딩테스트 lv.1 달리기 경주

function solution(players, callings) {
    let rank = {};
    players.forEach((name, index) => rank[name] = index);
    for(let i = 0; i < callings.length; i++){
        let winner = callings[i]; //이름
        let winnerI = rank[winner];
        let loserI = winnerI-1;
        rank[winner]--;
        rank[players[loserI]]++;
        
        players[winnerI] = players[loserI];
        players[loserI] = winner;
    }
    return players;
}

다른 분들의 풀이를 보고 풀 수 있었다 ㅠ

forEach 함수는 값(value)와 인덱스를 인자로 배열 순회

 

 

풀이 방법

  • rank 객체를 생성해준다.
  • players배열을 forEach함수로 순회해서 rank객체에 넣어준다. 
    예시) Mike:0, tom:1, Jane:2 ...
  • for문을 calling 배열의 길이 만큼 돌려준다. 
  • 불린 이름의 주인을 winner 변수에, 등수는 winnerI 변수에, 진사람의 등수는 loserI 변수에 넣어준다. (여기서 1등은 0이 들어가겠지)
  • rank 객체에 저장되어있던 등수를 변경해준다. 
  • players 배열에 이름을 재저장한다.
  • for문 루프가 끝난 후 players 배열을 리턴한다.