자료구조 알고리즘

달리기 경주

진호우 2024. 5. 15. 16:50

문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

function solution(players, callings) {
  let tempPlayers = players;
  let tempCalling = "";
  let tempIndex = -1;

  for (let calling = 0; calling < callings.length; calling++) {
    let player = callings[calling];
    if (players.includes(callings[calling])) {
      tempCalling = tempPlayers[players.indexOf(player) - 1];
      tempIndex = players.indexOf(player);
      tempPlayers[players.indexOf(player) - 1] = callings[calling];
      tempPlayers[tempIndex] = tempCalling;
    }
  }

  return tempPlayers;
}

 

단순하게 문제 규칙에 맞게 접근했을때, 배열 접근시 시간초과나는 Case 발생

 

연산되는데 필요한 시간이 오래걸리는 List를 Map 형태로 변형 후 진행

 

function solution(players, callings) {
    const hash = new Map();
    
    players.forEach((player, index) => {
        hash.set(player, index);
    })
    
    callings.forEach(player => {
        const currIdx = hash.get(player);
        const front = players[currIdx - 1];

        [players[currIdx], players[currIdx -1]] = [players[currIdx -1], players[currIdx]];
        
        hash.set(player, hash.get(player) - 1);
        hash.set(front, hash.get(player) + 1);
    })
    
    return players;
}

'자료구조 알고리즘' 카테고리의 다른 글

스택  (0) 2025.01.21
배열  (0) 2025.01.20
퀵정렬 알고리즘  (0) 2022.06.22
선택정렬 알고리즘  (0) 2022.06.22
선택정렬 알고리즘  (0) 2022.06.22