공부/코딩테스트

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

iris3455 2025. 9. 17. 16:51

문제 설명

 

신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.

  • 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
    • 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
    • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
  • k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
    • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.

 

 

나의 풀이

  • 딕셔너리를 신고한 딕셔너리, 신고당한 딕셔너리로 나누기 & id 길이 만큼 answer 빈 리스트 만들기
  • report를 돌면서 reported_idc에 신고당한 유저 데이터 입력
  • 만약 그 횟수가 k 이상이면 reported_dic의 밸류 값을 reporting_idc에 추가
  • 마지막으로 reporting_idc을 돌면서 벨류의 길이를 answer에서 해당 인덱스를 찾아 넣기
def solution(id_list, report, k):
    answer = [0] * len(id_list)
    reported_dic = {} # {frodo : {"muzi", "apeach"}} 신고 당한 frodo
    reporting_dic = {} # {apeach : {"muzi", "frodo"}} 신고한 apeach
    
    for r in report:
        texts = r.split()
        report_user = texts[0]
        reported_user = texts[1]
        
        if reported_user not in reported_dic:
            reported_dic[reported_user] = set()
            
        reported_dic[reported_user].add(report_user)
        
        if len(reported_dic[reported_user]) >= k:
            for reporting_user in reported_dic[reported_user]:
                if reporting_user not in  reporting_dic :
                    reporting_dic[reporting_user] = set()
                reporting_dic[reporting_user].add(reported_user)
                 
    for user in reporting_dic:
        lenght = len(reporting_dic[user])
        answer[id_list.index(user)] = lenght
                
                
    return answer

 

 

다른 풀이

  • 먼저 신고한 사람 딕셔너리를 초기화 reports = { x:0 for x in id_list} 
  • report를 set으로 만들어서 중복 신고 제거
  • reports에 데이터 넣기
  • reports 에서 벨류가 k 이상이면 인덱스를 활용하여 리스트에서 해당 인덱스 찾아서 +1
def solution(id_list, report, k):
    answer = []
    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

 

'공부 > 코딩테스트' 카테고리의 다른 글

[트리] 트리순회  (0) 2025.09.20
[해시] 메뉴 리뉴얼  (0) 2025.09.19
[프로그래머스] 베스트 앨범  (0) 2025.09.16
[프로그래머스] 오픈채팅방  (0) 2025.09.15
[프로그래머스] 할인행사  (0) 2025.06.26