sm 기술 블로그

신고 결과 받기(2022 KAKAO BLIND RECRUITMENT) - 파이썬 본문

문제/프로그래머스_파이썬

신고 결과 받기(2022 KAKAO BLIND RECRUITMENT) - 파이썬

sm_hope 2022. 10. 8. 13:18
def solution(id_list, report, k):
    answer = list(0 for _ in range(len(id_list)))
    declaration = dict()
    report = list(set(report))

    for i in report:
        victim, perpetrator = i.split(" ")
        try:
            declaration[perpetrator] += [i]
        except:
            declaration[perpetrator] = [i]

    for j in declaration:
        if len(declaration[j]) >= k:
            for z in declaration[j]:
                victim, perpetrator = z.split(" ")
                answer[id_list.index(victim)] += 1
    
    return answer

문제요약

유저에게 신고 두 번 이상 받으면 계정이 정지된다.

계정이 정지되면 신고한 유저에게 알림 메일을 보낸다.

설명

딕셔너리를 생각해냈다면 짧고, 어렵지 않게 풀었을 거다.

(생각을 좀 많이 한게 흠이긴 하다.)

 

    answer = list(0 for _ in range(len(id_list)))
    declaration = dict()
    report = list(set(report))

answer 는 유저의 수만큼 0으로 초기화 한다. -> 알림메일을 보낸 횟수로 사용할 것이다.

declaration 는 딕셔너리로 초기화 한다.

report = list(set(report)) 여러번의 신고는 한번으로 친다.

집합은 중복을 허용하지 않는다.

따라서 리스트를 집합으로 바꾸어 중복을 제거하고 다시 리스트로 바꿔 주었다.

 

    for i in report:
        victim, perpetrator = i.split(" ")
        try:
            declaration[perpetrator] += [i]
        except:
            declaration[perpetrator] = [i]

신고를 당한 사람에 리포트 내용을 집어 넣는다.

예외처리를 사용한 이유는 딕셔너리에 값이 없으면 +=는 에러를 내뱉는다.

따라서 에러가 난 경우 (값이 없을 경우) = 를 이용해 값을 넣어 준다.

 

    for j in declaration:
        if len(declaration[j]) >= k:
            for z in declaration[j]:
                victim, perpetrator = z.split(" ")
                answer[id_list.index(victim)] += 1

딕셔너리의 갯수가 k 이상이라면 신고한 회원들(victim) 에게 알림 메일을 보낸다.

Comments