해시 3

프로그래머스 [해시] - 위장

프로그래머스 해시 - 위장 1. 문제유형 hashmap 2. 해결과정 경우의 수 문제이므로 각 type별 의상 개수를 구한다. 각 type별 의상 개수 + 1을 곱한 값에서 -1 처리를 구한다. 의상 개수 + 1을 하는 이유는 해당 의상을 안 입는 경우가 있기 때문이다. 결과값에서 -1 처리를 하는 이유는 어떤 의상도 입지 않은 경우를 제거하기 위함이다. 3. 소스코드 from collections import defaultdict def solution(clothes): answer = 1 hashmap = defaultdict(list) for name, type in clothes: hashmap[type].append(name) for k, v in hashmap.items(): answer *=..

알고리즘 2021.09.06

프로그래머스 [해시] - 전화번호 목록

프로그래머스 해시 - 전화번호 목록 1. 문제유형 hash map 2. 해결과정 크게 3가지 풀이방법이 존재했다. 2중 for문을 활용하는 방법 문자열 내장함수 startswith를 사용한 방법 hash를 활용한 방법 결론적으로 1번 방법은 시간복잡도가 O(N^2)이므로 효율성 문제를 통과할 수 없다. 따라서 2번과 3번을 활용한 풀이가 가능하다. 3. 소스코드 def solution1(phone_book): answer = True phone_book = sorted(phone_book, key=len) for n1 in phone_book: for n2 in phone_book: if n1 == n2[:len(n1)] and n1 != n2: answer = False return answer ret..

알고리즘 2021.09.05

프로그래머스 해시 - 완주하지 못한 선수

🔸 문제 접근 방식 ❗ 풀이 성공, 시간 초과 participant, completion을 Queue에 넣는다. completion을 꺼내 participant에 있으면 participant에서 제거한다. completion 요소가 없어질때까지 반복하고 남아있는 participant를 반환한다. → 이 문제의 경우 답을 구할 수는 있지만, 효율성 문제가 있었다. 시간복잡도가 O(N^2)일 경우 통과할 수 없다. ⭕ 시간 초과 해결 best_solution1, 2로 풀이 시 효율성 문제를 통과할 수 있었다. best_solution1의 경우, 정렬 후 최대 $10^5$번 비교를 수행하기 때문에 O(N)만 수행하면 된다. best_solution2의 경우 해시를 사용한 풀이방식으로 시간 단축에 효과적이었다...

알고리즘 2021.06.27