[프로그래머스] 신고 결과 받기

박신희·2022년 4월 19일
0

[풀이] 프로그래머스

목록 보기
15/33
post-thumbnail

❗ 풀이 과정

  • 한 유저를 여러 번 신고할 수 있지만, 동일한 유저에 대해서는 신고 횟수를 1회로 처리된다는 내용이 있지만, 예시 2를 보면 동일한 유저에 대해서 신고를 여러번 한다.
    이걸 처리하기 위해서 set()함수를 썼다.
  • report 배열을 보면 신고한 사람과 신고된 사람이 분리되어있지 않고 문자열로 합쳐져있기 떄문에 split()함수를 통해 분리시켰다.
  • 멤버 별로 신고된 횟수 count -> k번 이상 신고된 멤버 이름 따로 리스트 만들기 -> 정지된 멤버를 신고한 멤버를 알아내기 위해서 다시 report 변수 써먹기 -> 신고한 멤버 따로 count해주기 -> id_list 기준으로 출력

🤜 풀이 코드

def solution(id_list, report, k):
    # 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
    report=list(set(report))
    # 멤버 별로 신고된 횟수 count 할 딕셔너리
    report_cnt=dict()
    # 각 유저가 받은 결과 메일 수를 담은 딕셔너리
    report_mem=dict()
    # 정지 당한 멤버 이름 담는 리스트
    r_user=[]
    
    # 멤버 별로 신고된 횟수 count 하기 
    for r in report:
        key,v=r.split()
        report_cnt[v]=report_cnt.get(v,0)+1

    # k 번 이상 신고된 멤버 이름 추려내기      
    for key, v in report_cnt.items():
        if v>=k:
            r_user.append(key)

    
    # 정지된 멤버 신고한 멤버 count
    for r in report:
        r_u, b_u = r.split()
        if b_u in r_user:
            report_mem[r_u]=report_mem.get(r_u,0)+1
    
    # id_list 기준으로 출력   
    return [ report_mem.get(id,0) for id in id_list]
profile
log my moments 'u')/

0개의 댓글