프로그래머스 달리기 경주 자바스크립트

버건디·2023년 5월 5일
0

프로그래머스

목록 보기
45/66

문제 링크

- 내 풀이 (시간 초과)

function solution(players, callings) {
  for (let i = 0; i < callings.length; i++) {
    let index = players.indexOf(callings[i]); // 3
    let player = players.splice(index, 1); // 'kai'

    let slicePlayers = players.slice(index - 1); // 'poe', 'mine'

    let sumArr = [...player, ...slicePlayers];

    players.splice(index - 1); // 현재 players ['mumu', 'soe']

    players.push(...sumArr);
  }

  return players;
}

제한사항에 callings 갯수를 제대로 못봤었다.

- 수정 코드

function solution(players, callings) {
  let playersMap = new Map();
  let playerArr = [...players];
  let answer = [];

  playerArr.forEach((player, index) => playersMap.set(player, index));

  [...callings].forEach((player, index) => {
    let frontplayerIndex = playersMap.get(player) - 1; // 2
    let frontplayer = players[frontplayerIndex]; // poe

    players[frontplayerIndex] = player;
    players[frontplayerIndex + 1] = frontplayer;

    playersMap.set(player, playersMap.get(player) - 1);
    playersMap.set(frontplayer, playersMap.get(frontplayer) + 1);
  });

  [...playersMap].sort((a, b) => a[1] - b[1]).map((arr) => answer.push(arr[0]));

  return answer;
}

Map 을 이용해서 풀이했다.

value값을 통해서 key값을 가져올수는 없지만 기존 배열의 인덱스 값을 통해 가져올수 있다.

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글

관련 채용 정보