Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

coding etude

[Javascript]달리기 경주 본문

algorithm

[Javascript]달리기 경주

코코리니 2023. 8. 9. 00:41

문제 생략.......

 

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