Programmers/Level 1

[Javascript] 프로그래머스 : 완주하지 못한 선수

emayom 2021. 6. 26. 05:44

[Javascript] 프로그래머스 Level1 _완주하지 못한 선수 

(p.s. 여러번 통과하지 못한 emayom .... 😵‍💫)

 

👇🏻문제링크

🔍 정답

 

예제에서 같은 이름을 가진 사람은 단 2명이다. 

그렇기 때문에 두 배열을 .sort()로 정렬한 뒤 => n번째가 다를 때 바로 리턴해버리면 그게 답이다.

function solution(participant, completion) {
    participant.sort();
    completion.sort();
    
    for(let i in participant){
        if((completion[i] != participant[i]))
            return participant[i];
    }
}

👇🏻

시행착오

( + 코드를 작성하면서든 생각들.)

 

문제에서 요구하는 답은 해당 코드로도 충분히 해결하지만

해당 문제의 카테고리는 해시(Key-value쌍으로 데이터를 저장하는 자료구조)이기 때문에 

조금 더 고민을 해봐야했다.

 

1.

처음에는 A에는 있지만 B에는 없는 것을 찾아야지하는 생각에 .filter()를 사용해봤다.

(filter는 리턴 값이 배열이라 .toString()으로 문자열만 리턴했다.)

function solution(participant, completion) {
    let temp = participant.filter(x => !completion.includes(x));
    return temp.toString();
}

코드를 실행해보니 테스트 3번 (동명이인이 있는 경우) 두명 모두 걸러져서 빈 배열을 리턴했다.

 

2.

동명이인이 2팀이라면 ??!!?

천을 덧대듯 .... 코드를 덧대었다ㅎㅎㅎ

 

예제의 마지막 케이스에 동명이인을 한 명 더 추가한 뒤 콘솔로 찍어봤다. 두번 찍힌다.

participant[3], [4] (stanko)은 비교 대상이 없지만 undefined 와 "stanko"를 비교해서 찍어줬다. 쓸데없이 쏘스윗..

 

그래서 동명이인이 최대 2명이라는 가정하에 

ta-dan! 100점 만점에 정확성 50점, 효율성 빵점짜리 코드가 만들어졌다.

function solution(participant, completion) {
    
    participant.sort();
    completion.sort();
    
    for(let i in completion){
    	if(completion[i] == participant[0]) {
        	participant.shift();
        } else if(completion[i] == participant[1]){
        	participant.splice(1,1);
    	}
    }
    return participant.toString();
}

 

3.

레벨 순으로 필터링해서 들어왔더니 몰랐는데

문제의 카테고리가 해시 ..! 였다. 조금 더 공부해서 다시 풀어봐야겠다.


⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도 입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️