문제설명)
마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.
문제는 이런식이여서 처음엔 간단하게 풀어봤다.
문제풀이)
각각의 어레이를 정렬해서 비교
길이를 맞추기 위해 completion에는 빈값 추가
function solution(participant, completion) {
var answer = '';
completion[completion.length] = '';
var arr1 = participant.sort();
var arr2 = completion.sort();
for(let i=0; i<arr1.length; i++){
if(arr1[i] !== arr2[i]){
answer = arr1[i];
}
}
return answer
}
하지만 이렇게 하니깐 해시로 푼거 같지도 않고 성능이 떨어져 보여서 다른 방식을 좀 더 찾아봤다.
문제풀이)
어레이 값을 비교할 맵을 생성
길이가 +1 더 긴 pa~어레이를 포문을 돌린다
a 에서 존재하지않으면 0 +1 => 1 , 존재하면 1 반환 + 1 이런식으로 0이상의 값을 추출한다
맵을 포문을 돌려서 0이상인 값을 리턴함
function solution(participant, completion) {
const map = new Map();
for(let i = 0; i < participant.length; i++) {
let a = participant[i];
let b = completion[i];
map.set(a, (map.get(a) || 0) + 1);
map.set(b, (map.get(b) || 0) - 1);
}
for(let [k, v] of map) {
if(v > 0) return k;
}
}
map.set 을 사용해서 작성해보았다. 해시랑 훨씬 알맞는 느낌? 좋은듯
map.set(key, value) 메소드는 주어진 키-값 쌍을 Map에 추가하거나 업데이트할 수 있다.
반응형
'코딩테스트' 카테고리의 다른 글
[코테] 프로그래머스 해시 알고리즘 - 의상 (문제풀이) (0) | 2024.04.28 |
---|---|
[코테] 프로그래머스 해시 알고리즘 - 전화번호 목록 (문제풀이) (2) | 2024.04.28 |
[코테] 프로그래머스 해시 알고리즘 - 폰켓몬 문제풀이 (0) | 2024.04.21 |
[코테] 그리디 & 분할 정복 & 해시 알고리즘 예제 (0) | 2024.04.21 |
[코테] 그래프 알고리즘 & 동적 계획법 예제 (0) | 2024.03.24 |