코딩테스트 공부3

Junghun Park·2022년 4월 13일
0

코딩테스트준비

목록 보기
3/5

코딩테스트 공부

Programmers - level 1:

신고 결과 받기

python3



My solution

from collections import defaultdict
def solution(id_list, report, k):
    answer = []
    report = list(set(report))
    result = defaultdict(list)
    ban = defaultdict(int)
    
    for rep in report:
        rep = rep.split(" ")
        result[rep[0]] += [rep[1]]
        ban[rep[1]] += 1
        
    for user in id_list:
        mail = 0
        # if ban[user] >= k:
        #     mail += 1
        for rep in result[user]:
            if ban[rep] >= k:
                mail += 1
        answer.append(mail)
        
    
    return answer

Dictionary를 써서 해결했다. 저기 두줄의 주석은 문제를 제대로 이해하지 못한 난독증으로 인한 결과.
반성의 의미로 남겨두었다. 내가 신고한 결과가 처리된 메일 받는 수만 카운팅 하는건데,
내가 신고 당해서 메일 받는 것도 추가로 카운팅 해서 틀렸었다.
Defaultdict는 처음 써봤는데 앞으로도 종종 유용하게 쓰일 것 같다.
import 해야해서 써도 괜찮은가 싶기는 하지만.
업로드중..

Better Solution

def solution(id_list, report, k):
    answer = [0] * len(id_list)    
    reports = {x : 0 for x in id_list}

    for r in set(report):
        reports[r.split()[1]] += 1

    for r in set(report):
        if reports[r.split()[1]] >= k:
            answer[id_list.index(r.split()[0])] += 1

    return answer

접근은 비슷한거 같다 하지만 훨씬 깔끔하다. 외부 라이브러리도 안썼다.
.index를 써서 dictionary를 따로 만들지 않고도 dictionary처럼 썼다. 새로 하나 배웠다.
화이팅.

0개의 댓글