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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

 

처음 작성한 코드 (시간초과)

function solution(players, callings) {
    var answer = [];
    var ph = new Map();
 
    for(let idx in players){
         ph.set(players[idx],idx);
    }
    
    answer = players;
    let ans = []; 
    callings.forEach((val)=>{
        let idx = ph.get(val);
        ph.set(answer[idx-1],idx);
        
        answer.splice(idx,1);
        answer.splice(idx-1,0,val);
        
        ph.set(val,idx-1)
    
    })
    
    return answer;
   
}

 

 

시간소요를 줄이기 위해서 findIndex 대신 해시맵을 사용해 플레이어들의 등수를 인덱싱 한 것 까진 괜찮았으나,

여전히 splice를 사용한 탓에 4개의 테스트에서 시간초과가 떴다. 

 

 

통과한 코드

function solution(players, callings) {
    var answer = [];
    var ph = new Map();
 
    for(let idx in players){
         ph.set(players[idx],idx);
    }
    
    answer = players;
    callings.forEach((val)=>{
        let idx = ph.get(val);
        ph.set(answer[idx-1],idx);
        let tempt = answer[idx-1]
        
        answer[idx]=tempt;
        answer[idx-1]=val;
        ph.set(val,idx-1)
    
    })
    
    return answer;
}

생각해보니 중간에 뭔가를 삽입할 일이 없는데 splice를 사용하는것은 비효율적이란 생각이 들었다. 

그래서 단순하게 생각하니 문제가 풀렸다 ~.~ 몇시간이나 고민했네 ... 

+ Recent posts