본문 바로가기

Web/Algorithm

[ 프로그래머스 > 해시] 완주하지 못한 선수

나의 첫번째 제출 코드 오답. 

function solution(participant, completion){
    let answer = participant;
    completion.forEach((val,idx) => {
         participant.splice(participant.indexOf(val),1)[0]
    });
    answer = participant[0]
    return answer;
}

 

조급하게 이어진 시도들에서도 반복을 여러번 쓰는 for + 탐색() + splice로 데이터 삭제하는 방법을 버리지 못했다.

사실 뭐가 문제인지 잘 몰랐다.

나의 두번째 제출 코드 오답. 

function solution(participant, completion){
    let answer ='';
    for(let i of completion){
        participant.splice(participant.indexOf(i),1)[0];
    }
    answer = participant[0]
    return answer;
}

질문 목록을 보니 내 동지들이 많았다. 

그리고 어느 분께서 indexOf, for문을 쓰면 찾을 때까지 반복+ 끝까지 반복이라 효율이 떨어진다.

정렬을 하고나면 반복문 사용 줄일 수 있다는 거의 정답을 알려주셔서ㅎ.

수정 후 통과된 나의 정답. 정렬을 하면 굳이 자르지 않아도 됐었다. 

function solution(participant, completion){
    participant.sort();
    completion.sort();
    let answer = participant.find((elem,idx) => { if(elem !== completion[idx]) return  elem; });
    return answer;
}

그 외, reduce를 써서 해결한 사람도 있었는데 reduce는 아직도 내게 서툰 부분이라 가져와 봄. 

function solution(participant, completion) {
  let dic = completion.reduce((prev, val) => {
      return prev[val] = prev[val] ? prev[val]+1 : 1 , prev
  },{});
    return participant.find(t=> {
        if(dic[t]) dic[t] = dic[t]-1;
        else return true;
    });
}

아... Lv1 문제라는데 겨우 통과라니 눈물난다 ㅠㅠ.....