[Algorithm🧬] 신고 결과 받기

또상·2022년 3월 11일
0

Algorithm

목록 보기
46/133
post-thumbnail

신고 결과받기

문제 / 풀이.py

풀이

def solution(id_list, report, k):
    answer = []
    count_dict = {}
    mail_dict = {}
    reporter_dict = {}
    
    # 한 사람이 같은 사람을 여러번 신고한 건 카운트 하지 않음.
    report = list(set(report))
   
    # dict 초기화
    for user_id in id_list:
        count_dict[user_id] = 0
        mail_dict[user_id] = 0
        reporter_dict[user_id] = []
    
    # report 에서 신고자, 신고당한 사람을 분리해서,
    # 신고 당한 사람 : 신고 당한 횟수와 -> 기준치를 넘기는지 확인해야 함
    # 신고 당한 사람 : 신고한 사람 배열을 저장. -> 메일 보내줘야 함
    for r in report:
        [reporter, bad_guy] = r.split(' ')
        count_dict[bad_guy] += 1
        reporter_dict[bad_guy] += [reporter]
    
    
    for bad_guy in count_dict:
        # 신고 당한 횟수가 기준치를 넘으면
        if count_dict[bad_guy] >= k: 
            # 그 사람을 신고한 사람에게 메일을 보낸다. (한 사람이 메일 받는 횟수 저장)
            for reporter in reporter_dict[bad_guy]:
                mail_dict[reporter] += 1
    
    # 메일 받은 횟수가 정답.
    for user_id in id_list:
        answer.append(mail_dict[user_id])
    
    return answer

전에는 엄청 헷갈렸는데 딕셔너리를 잘 쓰게 되니까... 쉽게 풀 수 있었다.

하지만 이런 개멋진 풀이를 하기 위해선... 아직 멀었나보다.

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:
            # 신고 한 사람을 따로 저장하지 않고 id_list.index(r.split()[0]) 으로 사용.. 쩐다...
            answer[id_list.index(r.split()[0])] += 1

    return answer
profile
0년차 iOS 개발자입니다.

0개의 댓글