1) 무식한 방법이라고 생각은 했지만.. 시간초과로 오답이라니.
function solution(players, callings) {
callings.forEach((name) => {
let index = players.indexOf(name);
players[index] = players[index-1];
players[index-1] = name;
})
return players;
}
2) 시간을 어떻게 단축할지 몰라서 다른 분 포스트를 참고하였다.
indexOf
로 접근해서 시간이 많이 걸린 것이라고 한다. => O(N^2)
key 로 접근해야 O(1) 이므로 index 를 따로 뽑아 저장하여 이를 활용하기로 하였다.
https://yong-nyong.tistory.com/50
function solution(players, callings) {
// 선수 별 index
let p_idx = {};
players.forEach((name, idx) => {p_idx[name] = idx});
callings.forEach((name, idx) => {
let initial_idx = p_idx[name]; // 추월자의 원래 순서
let front_player = players[initial_idx-1]; // 추월할 선수
// players 변경
players[initial_idx-1] = players[initial_idx];
players[initial_idx] = front_player;
// p_idx 도 그에 맞게 변경
p_idx[name]--;
p_idx[front_player]++;
});
return players;
}
function solution(players, callings) {
const rank = {};
players.forEach((c,i) => rank[c] = i);
for(const winner of callings){
let winnerI = rank[winner];
let loserI = winnerI - 1;
rank[winner]--;
rank[players[loserI]]++;
players[winnerI] = players[loserI];
players[loserI] = winner;
}
return players;
}