2022 KAKAO BLIND RECRUITMENT) 신고 결과 받기 [level 1]

Ji·2022년 3월 15일
0
#1. 각 유저는 한명의 유저 신고 o (동일 유저 신고횟수는 1회로 처리)
#2. k번 이상 신고된 유저는 게시판 이용이 정지. (V)
# -> dict에 신고 당한 횟수 항목을 만든 후 k번 이상일 시, 해당 id를 추출 (V)
#3 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송 (V)
# -> 해당 id를 신고한 유저가 report_id에 있으면, 그 수를 센 후에 cnt+=1 (V)
#예외처리

def solution(id_list, report, k):
    answer = []
    banned_id_list=[]
    # dict 생성
    reported_dict = {}
    report=list(set(report)) #set으로 신고 중복 제거


    for id_name in id_list: # 각 사람 별로 리스트 생성.
        reported_dict[id_name] = {
            "report_id" : [], #신고한 id
            "reported_num" : 0 #신고 당한 횟수
        }


    for report_name in report: # report에서 신고인, 피신고인 분류
        report_person_name, reported_person_name = report_name.split()

        for id_name in id_list:
            if id_name==reported_person_name:  # 본인의 id가 신고를 당했을 경우
                reported_dict[id_name]["reported_num"]+=1 #신고 당한 횟수를 추가

            if id_name==report_person_name: #본인의 id가 신고를 했을 경우
                reported_dict[id_name]["report_id"].append(reported_person_name) 
                #해당 id가 신고한 사람을 추가

    for id_name in reported_dict:
        if reported_dict[id_name]["reported_num"]>=k: # 해당 id가 k번 이상 신고 당했을 경우
            banned_id_list.append(id_name) # banned_id에 해당 id를 추가

    banned_id_list=list(set(banned_id_list)) #중복 제거

    for id_name in reported_dict:
        cnt=0
        for banned_id in banned_id_list: #정지된 id 체크
            if banned_id in reported_dict[id_name]["report_id"]: # 정지된 id가 신고한 id에 있으면 메일 수 1증가
                cnt+=1
        answer.append(cnt)


    return answer
  • k번 이상 신고 당했을 시 체크 여부를 for문에 넣어서 시간 초과가 났음.
  • 딕셔너리 사용법 숙지

빠른 풀이

def solution(id_list, report, k):
    answer = [0] * len(id_list)    
    reports = {x : 0 for x in id_list} #신고 당한 횟수 dictionary

    for r in set(report):
        reports[r.split()[1]] += 1 # 피신고인 id에 신고 당한 횟수 +1 씩

    for r in set(report):
        if reports[r.split()[1]] >= k: #신고 당한 횟수가 k를 넘어갈 때
            answer[id_list.index(r.split()[0])] += 1 # answer의 id_list 항목에 1증가
            
    return answer


solution(["muzi", "frodo", "apeach", "neo"],["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"],2)

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

profile
공부방

0개의 댓글