function solution(players, callings) {
// { 선수: 순위}
let hash = new Map();
players.forEach((player, idx) => hash.set(player, idx))
callings.forEach(name => {
const idx = hash.get(name);
const front = players[idx - 1];
[players[idx], players[idx - 1]] = [players[idx - 1], players[idx]];
hash.set(front, idx);
hash.set(name, idx - 1);
})
return players;
}
입력값의 제한은 다음과 같습니다.
처음에는 callings 배열에 대해 forEach 메서드를 돌리고 이어서 players 배열에 대해 indexOf 메서드를 적용하는 식으로 풀이했습니다.
당연하게도 시간이 초과되었습니다. (1,000,000 * 50,000 > 100,000,000)
배열의 indexOf 메서드가 시간복잡도 O(n)라는 점을 간과했기 때문입니다.
시간초과 문제를 해결하기 위해 Map 자료형을 사용했습니다.
구조 분해 할당을 이용할 수 있습니다.
const a = [1, 2, 3, 4];
[a[0], a[1]] = [a[1], a[0]]; // [2, 1, 3, 4]