Hyundolog

[Programmers] Lv1. 달리기 경주 (JavaScript) 본문

문제 풀이/프로그래머스

[Programmers] Lv1. 달리기 경주 (JavaScript)

hyundol97 2023. 5. 5. 12:45

문제

 


 

 

풀이

1차 (정확성 75점) 오답

function solution(players, callings) {
    
    for(let i = 0; i < callings.length; i++) {
        let called_idx = players.findIndex((item) => item === callings[i]);
        let temp = players[called_idx-1];
        players[called_idx-1] = players[called_idx];
        players[called_idx] = temp;
    }
    
    return players;
}

 

 

2차

function solution(players, callings) {
    let idx_object = {};
    
    // 인덱스를 담을 객체 생성
    for(let i = 0; i < players.length; i++) {
        idx_object[players[i]] = i;
    }
    
    callings.forEach((value) => {
        let current_idx = idx_object[value];
        // 앞에 있는 선수와 callings에 담겨있는 선수와 교환
        let front_player = players[current_idx-1];
        players[current_idx-1] = players[current_idx];
        players[current_idx] = front_player;
        
        // players 원소 교환 후, idx_object 원소(인덱스) 또한 교환
        idx_object[value]--;
        idx_object[players[current_idx]]++;
    });
    
    return players;
}

 

3차

function solution(players, callings) {
    let idx_object = {};
    
    players.forEach((name, idx) => {idx_object[name] = idx});
    
    callings.forEach((called_player, idx) => {
        let current_idx = idx_object[called_player];
        let front_player = players[current_idx-1];
        players[current_idx-1] = players[current_idx];
        players[current_idx] = front_player;
        
        idx_object[called_player]--;
        idx_object[front_player]++;
    })
    
    return players;
}

 


 

리뷰

  • 문제에서 주어지는 배열의 최대 길이를 고려하여 효율성 고려 필요
  • Array로만 작성하여 효율성에 문제가 있다면, Object를 함께 활용할 아이디어 차용 필요
  • forEach문을 활용한 코드 가독성 증진 시도 필요
Comments