[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.
레벨 순으로 필터링해서 들어왔더니 몰랐는데
문제의 카테고리가 해시 ..! 였다. 조금 더 공부해서 다시 풀어봐야겠다.
⚠️ 아래 내용은 모두 개인적인 참고 / 기록을 위한 용도 입니다. 참고해주시고 편안하게 봐주세요 :) ⚠️
'Programmers > Level 1' 카테고리의 다른 글
[Javascript] 프로그래머스 : 짝수와 홀수 (0) | 2021.06.27 |
---|---|
[Javascript] 프로그래머스 : 평균 구하기 (0) | 2021.06.27 |
[Javascript] 프로그래머스 : 핸드폰 번호 가리기 (0) | 2021.06.27 |
[Javascript] 프로그래머스 : x만큼 간격이 있는 n개의 숫자 (0) | 2021.06.26 |
[Javascript] 프로그래머스 : 직사각형 별 찍기 (0) | 2021.06.26 |