coding etude
[Javascript]달리기 경주 본문
문제 생략.......
1.실패... (시간초과)
indexOf 연산이 오래 걸림...
값이 있는지 검색 후 데이터를 업데이트 하는 과정이 O(n^2)...라고 한다..
function solution(players, callings) {
let idxArr = [];
callings.forEach(name => {
let idx = players.indexOf(name); // 인덱스 번호를 설정 후
[players[idx], players[idx-1]] = [players[idx-1], players[idx]];
// 인덱스 와 인덱스 -1 값을 스프레드 신텍스를 활용하여 sort 한다.
});
return players;
}
2. 성공
미리 객체 형태고 {name : index} 형태로 만들어서 indexOf를 사용하지 않도록 했다.
function solution(players, callings) {
let playersIdx = {};
// 객체 형태로 미리 player:index 형태로 만들기.
players.forEach((name, index) => {
playersIdx[name] = index;
});
for(let i=0; i< callings.length; i++){
let idx = playersIdx[callings[i]]; // 실제 변경되어야 하는 index.
let chang = players[idx-1]; // 객체의 index도 업데이트 해주기위해 미리 저장.
[players[idx], players[idx-1]] = [players[idx-1], players[idx]];
// [a, b] = [b, a] spread syntax
// 이렇게 풀어 사용 해도 된다.
// players[idx-1] = callings[i];
// players[idx] = chang;
playersIdx[callings[i]] = idx - 1;
playersIdx[chang] = idx;
}
return players;
}
'algorithm' 카테고리의 다른 글
[javascript] 공원산책 (2) | 2024.01.07 |
---|---|
[javascript]추억 점수 (1) | 2023.12.23 |
[javascript] 햄버거 만들기 (0) | 2023.01.09 |
[javascript] 푸드파이트 대회 (0) | 2023.01.05 |
[Javascript] 과일 장수 (0) | 2023.01.05 |