0412 TIL

looggi·2023년 4월 12일
0

TILs

목록 보기
60/114
post-thumbnail

프로그래머스 문제 풀기

해시💗 전화번호 목록

def solution(phone_book):
    answer = True
    hash_table={}
    for p in phone_book:
        hash_table[hash(p)]=p
    for p in phone_book:
        temp=''
        for l in p:
            temp+=l
            if temp!=p and hash(temp) in hash_table:
                return False
    return answer

해시는 키값으로 조회하는거니깐~!~!
if문에서 temp를 해시해서 hash_table의 키값에 있는지 비교해준다
그리구 in {dictionary}를 하면 자동으로 키값에서 검색을 해준다. 이전까지 계속 .keys()를 사용했는데 그럴 필요가 없겠다

해시를 사용하지 않고 2번째 for문 만 사용해서

def solution(phone_book):
    for p in phone_book:
        temp=''
        for l in p:
            temp+=l
            if temp!=p and temp in phone_book:
                return False
    return True

이렇게 해도 이중 for문보다 훨씬 빠르고 효율성도 반은 통과한다

🥷 위장

def solution(clothes):
    dic={}
    for c in clothes:
        if c[1] in dic:
            dic[c[1]].append(c[0])
        else:
            dic[c[1]]=[c[0]]
    for d in dic:
        dic[d]=len(dic[d])
    l=1
    for d in dic.values():
        l*=(d+1)
    return l-1

[의상 이름, 의상 종류]가 담긴 배열 clothes에 대해서
의상종류를 키로 가지는 딕셔너리를 만들고,
그 밸류 값들의 길이 +1을 모두 곱해주면 모든 경우의 수가 계산되고,
어떤 의상도 입지 않는 경우는 없으므로 마지막에 1을 빼준다

def solution(clothes):
    hm={}
    for c in clothes:
        hm[c[1]]=hm.get(c[1],0)+1
    answer=1
    for h in hm:
        answer*=(hm[h]+1)
    return answer-1

dic.get(key,0) 키값에 해당하는 값을 불러오고 없으면 0을 뱉는다
처음부터 len를 구해준 것과 같으므로 코드가 훨씬 간결하다
그런데 왜인지 더 느리다?

profile
looooggi

0개의 댓글