본문 바로가기
코테

[js] 달리기 경주_그런데 이제 자괴감을 곁들인

by zenna 2024. 3. 7.
728x90
테스트케이스 최대 소요시간 : 140.70ms

죽어도 시간초과를 해결 못해서 다른 사람 답을 찾아보고 참고했다. 
맨 아래엔 후기.....

 

문제 : https://school.programmers.co.kr/learn/courses/30/lessons/178871

 

제출답안

function solution(players, callings) {
    
    // player들의 현재위치를 map으로 변환
    let positions = {}; 
    players.forEach((player, index)=> positions[player]=index )
    
    callings.forEach((call)=>{ 
        let callerP = positions[call]; //호명자의 원래 위치
        let loser = players[callerP-1]; // 순위를 뺏긴 사람
        
        players[callerP] = loser; // 순위를 뺏긴 사람을 호명자의 자리에 넣음
        players[callerP-1] = call; //호명자 앞자리는 호명자로 대체
        // positions갱신
        positions[call] = callerP-1; 
        positions[loser] = callerP;
    })
    return players;
}

 

 

배열.indexOf("문자열") 이 찾을 때까지 문자열을 돌기 때문에 오래 걸린다는건 대충 눈치챘지만

이걸 map으로 바꿔서 검색 시간을 단축한다는 건 의외였다. 

players를 여러번 순회하지 않고 처음 한번만 순회한뒤 작업을 끝내는 생각을 어떻게 했을까.

갈길이 먼 것 같다..

 

728x90

댓글