이번 주에는 프로그래머스에서 Lv2, JavaScript, '해시' 유형 필터링 걸어서 나온 문제 3개를 모두 풀었다.
공통 유형의 문제들을 풀어보면 그 개념이 감이 올 것으로 예상했는데 그렇지 않아서 따로 정리해보려 한다.
이 값이 존재하는가/몇 개인가 를 빠르게 찾아야 할 때, '배열'보다 '해시'를 쓰는 것이 효율적이다!
배열로도 '이 값이 존재하는가', '몇 개인가'를 찾을 수 있다.
최악의 경우 배열의 모든 요소를 순회해야만 답을 구할 수 있다는 약점이 있을 뿐..
이것을 시간복잡도로 표현하면, O(n)
반면 Map을 사용하면, 키로 바로 접근하므로, O(1)의 시간복잡도를 갖는다.
// 배열
arr.includes("target"); // 최악의 경우 전체 순회
// Map
map.has("target"); // 내부 해시값을 이용해 바로 접근
{})가 내부적으로 해시 구조를 사용함.get, set 메서드에서 내부적으로 해시 함수를 사용아래와 같은 요구사항을 마주하면 Map을 우선 떠올려보자.
=> key로 value를 빠르게 찾는 구조를 만들어야 하는가? 를 생각해보면 됨
다만 전화번호 문제처럼 정렬로 더 깔끔하게 풀리는 경우도 있긴 함에 유의