문제 링크
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;
}