-
완주하지 못한 선수 해쉬로 풀기 자바스크립트TodayILearned/알고리즘 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)만큼의 시간복잡도를 갖는다.
'TodayILearned > 알고리즘' 카테고리의 다른 글
[알고리즘] JS 조합, 순열 재귀함수 이해하기 (0) 2021.08.23 위장 해쉬로 풀기 자바스크립트 (0) 2021.08.16 Intersection of Two Arrays II 자바스크립트 (0) 2021.08.16 프로그래머스 최댓값과 최솟값 (0) 2021.06.14 프로그래머스 짝지어제거하기 (0) 2021.06.14