알고리즘 | Algorithm

프로그래머스 | 2022 KAKAO BLIND RECRUITMENT> 신고 결과 받기

개발자R 2022. 4. 10. 23:06
반응형

카카오 문제는 막 어렵기도 전에 문제가 넘 길다.

하지만 문해력도 실력인걸?

알고리즘 공부한지 오래됐으니 이제 슬슬 감을 잡기 위해 하루에 한문제씩 풀어야겠다.

 

파이썬 넘나 오랜만.

def solution(id_list, report, k):
    answer = []
    stopped = set([])
    dic = {i: {"report_user": set([]), "reported": 0} for i in id_list}
    
    for data in report :
        [report_from, report_to] = data.split(' ')
        if(report_to not in dic[report_from]["report_user"]) :
            dic[report_from]["report_user"].add(report_to)
            dic[report_to]["reported"] += 1
    
    for key in dic:
        if dic[key]["reported"] >= k :
            stopped.add(key)
            
    for key in dic:
        answer.append(len(dic[key]["report_user"] & stopped))
    return answer

어떤사람 코드 보니까 12줄만에 풀었던데 ㅠㅠ (물론 가독성이 엄청 좋은건 아님)

나도 파이썬 익숙해져서 줄일 수 있으면 좋겠다.

 

살짝 개선한 코드

def solution(id_list, report, k):
    answer = []
    stopped = set([])
    dic = {i: {"report_user": set([]), "reported": 0} for i in id_list}
    report_set = set(report)
    
    for data in report_set :
        [report_from, report_to] = data.split(' ')
        dic[report_from]["report_user"].add(report_to)
        dic[report_to]["reported"] += 1
    
    for key in dic:
        if dic[key]["reported"] >= k :
            stopped.add(key)
            
    for key in dic:
        answer.append(len(dic[key]["report_user"] & stopped))
    return answer

report를 set으로 변환하니까 문제의 조건 중 한 사람이 중복 신고한 건은 1개로 간주한다는 것을 해결할 수 있었다.

if문 하나를 줄일 수 있는 방법이었다.

반응형