Programmers 42576. 완주하지 못한 선수
Title
Programmers 42576. 완주하지 못한 선수
Category
AlgorithmTags
Aliases
Programmers 42576. 완주하지 못한 선수
Created
3 years ago
Updated
last year
문제 유형 | 난이도 | 걸린 시간 | 해결 유무(✅/❌) |
---|---|---|---|
해시 | lv.1 | 30분 | ✅ |
설계 방법
JavaScript의 Map 자료구조를 사용
동명이인이 가능한 완주자 이름이 담긴 배열을 보고
완주자 이름 : 이름이 나온 횟수
의 해쉬 맵을 만듬참가자 배열을 순회하면서, 해쉬 맵에 참가자 이름이 있으면 이름이 나온 횟수를하나씩 줄임
- 만약 참가자 이름이 해쉬맵에 없거나 이름이 나온 횟수가 0 이라면 이 사람이 완주하지 못한 사람이므로 이 사람의 이름을 반환함
코드
javascript
function solution(participants, completions) {
const personCountsByNames = new Map();
participants.forEach((name) => {
personCountsByNames.set(name, (personCountsByNames.get(name) || 0) + 1);
});
completions.forEach((name) => {
personCountsByNames.set(name, (personCountsByNames.get(name) || 0) - 1);
});
for (let [name, personCount] of personCountsByNames) {
if (personCount === 1) {
return name;
}
}
}
function solution(participants, completions) {
const personCountsByNames = new Map();
participants.forEach((name) => {
personCountsByNames.set(name, (personCountsByNames.get(name) || 0) + 1);
});
completions.forEach((name) => {
personCountsByNames.set(name, (personCountsByNames.get(name) || 0) - 1);
});
for (let [name, personCount] of personCountsByNames) {
if (personCount === 1) {
return name;
}
}
}
시간 복잡도
O(n)
어려웠던 점
JS에서 해쉬를 구현하기 위해 객체를 사용할지, Map 자료구조를 사용할 지 고민함
성능상 Map이 이점이 있다는 것을 알고 Map을 사용하기로 함
Map은 JS의 객체와는 다르게 get, set 메소드를 사용해서 조작하기 때문에 가독성면에서 조금 떨어지는 듯함.
다른 사람의 한 줄 짜리 풀이를 봤는데 이해하기 어려웠음
javascript
var solution = (_, $) =>
_.find(
(_) => !$[_]--,
$.map((_) => ($[_] = ($[_] | 0) + 1)),
);
var solution = (_, $) =>
_.find(
(_) => !$[_]--,
$.map((_) => ($[_] = ($[_] | 0) + 1)),
);