알고리즘/프로그래머스문제풀이

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

개발자 덕구🐾 2022. 6. 28. 07:13
728x90

 

 

https://programmers.co.kr/learn/courses/30/lessons/92334

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

 

 


 

 

 

코드 :  (defaultdict 사용)

from collections import defaultdict 
def solution(id_list, report, k):
    answer = []
    # 중복 신고 제거 
    report = list(set(report))
    user = defaultdict(set)
    cnt = defaultdict(int)
    
    for r in report : 
        a,b = r.split()
        user[a].add(b)
        cnt[b]+=1 
    for i in id_list :
        result = 0
        for u in user[i] :
            if cnt[u] >= k :
                result += 1
        answer.append(result)        
    return answer

 

 

 

 

dict만 사용한 풀이 : 

 

def solution(id_list, report, k):
    answer = []
    reportDB = {x : [] for x in id_list}
    cntDB = {x : 0 for x in id_list}
    report = list(set(report))
    
    for r in report :
        a,b  = r.split()
        reportDB[a].append(b)
        cntDB[b]+=1
    
    for user in id_list :
        tmp_cnt =0
        for c in reportDB[user] :
            if cntDB[c]>=k :
                tmp_cnt+=1
        answer.append(tmp_cnt)

    return answer

 

 

 

defaultdict를 이용해서 한다는 것은 생각했는데 세부적인 내용들 구현이 부족했다.

중복 신고 제거를 list(set(report))로 한다는 것이 신박했다. 

 

 

 

id_list를 돌면서 해당 아이디가 신고한 사람들을 돈다.

신고한 사람 중 k번 이상 신고당한 사람이 있다면 answer 에 append하는 것이다. 

 

 

 

 

 

 

배운 점 : 

 

1. defaultdict를 한문장으로 만들기 

defaultdict를 사용하지않고 for문을 이용하여 만들 수 있다. 

 

reportDB = {x : [] for x in id_list}

은 

reportDB = defaultdict(list)와 동일하다.

 

 

 

 

 

 

참고 블로그 : 

 

https://velog.io/@stella317/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%A0%EA%B3%A0-%EA%B2%B0%EA%B3%BC-%EB%B0%9B%EA%B8%B0Python

 

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

문제 설명신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.각 유저는 한 번에 한 명의

velog.io

 

 

복습 : 

20220630

반응형