TodayILearned/알고리즘
완주하지 못한 선수 해쉬로 풀기 자바스크립트
tuigun
2021. 8. 16. 10:41

해쉬문제니까 해쉬로 풀었다.
해당 문제를 이중 for문을 이용해서 푸는 방법도 있지만,
그렇게하면 시간복잡도가 n^2으로 늘어나기도하고 일단 그건 해시 풀이가 아니어서..
어떤 주제로 문제가 주어지면 최대한 그 주제에 익숙해지기 위해서 해당 주제로 풀려고한다...
function solution(participant, completion) {
const HashTable = {};
let key;
// Add : 해쉬충돌까지 고려했다.
for (key of participant) {
if (!HashTable[key]) {
HashTable[key] = 1;
} else {
HashTable[key] = HashTable[key] + 1;
}
}
// Search
for (key of completion) {
HashTable[key] = HashTable[key] - 1;
console.log(HashTable);
}
for (key in HashTable) {
if (HashTable[key]) {
return key;
}
}
}
solution(
["marina", "josipa", "nikola", "vinko", "filipa"],
["josipa", "filipa", "marina", "nikola"]
);
처음 문제풀이를 할 때에는 단순히 빈 테이블에 주어진 배열의 값들을 넣었는데,
그렇게하다보니 해시충돌이 있는 테스트케이스에 걸렸다.
그래서 해시테이블에 추가할 때 중복되는 선수명을 고려해 다시 코드를 짰다.
- 위 풀이의 시간복잡도는 저장할 때 O(n), 탐색할 때 O(n), 평균적으로 O(n)만큼의 시간복잡도를 갖는다.