신고 결과 받기

하이·2022년 4월 24일
0

💣 문제

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

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

💬 나의 접근 방식

def solution(id_list, report, k):
    answer = [0 for i in id_list]
    report = set(report)
    id_dict = {}
    id = 0
    for i in id_list:
        id_dict[i] = [id, 0]
        id += 1
    for e in report:
        fr, to = e.split()
        id_dict[to][1] += 1
        id_dict[to].append(fr)

    for e in id_dict:
        if id_dict[e][1] >= k:
            for i in id_dict[e][2:]:
                answer[id_dict[i][0]] += 1
    return answer
  1. report는 중복될 가능성이 있기 때문에 set 자료형으로 처리해주었다.
  2. dictionary를 하나 만들어 준다.
  3. dictionary에서 0번째 index는 id로 사용해주고, 1번째 index는 신고당한 횟수로 지정했다.
  4. k번 이상 신고 당하면 id로 answer를 찾아서 처리

💯 제출 후 확인한 깔끔한 풀이

내 코드는 dictionary에 index, 신고당한 횟수, 신고한 사람, 신고당한 사람 등등 덕지덕지 쌓아놓았다. 정답을 제출하고 다른 사람의 코드를 봤다. 생각 하나가 다른 점을 만든 것 같았다.

나는 어떻게 신고한 사람을 알아낼지 고민을 했다. 단순히 k번 이상 신고 당한 사람만 알게 된다면 그 사람은 누가 신고했을까?를 알기 위해 기록을 한 거고.

하지만 그럴 필요 없었다. 단순히 신고 당한 횟수를 기록하고, 그 이후는 for loop으로 report를 한 번 더 돌아서 if 신고당한 횟수 >=k 인 경우 report를 한 사람의 index를 answer에서 +1 해주면 끝나는 문제였다.

profile
안녕하세요

0개의 댓글