신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.
- 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
- 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
- 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 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
내 코드는 dictionary에 index, 신고당한 횟수, 신고한 사람, 신고당한 사람 등등 덕지덕지 쌓아놓았다. 정답을 제출하고 다른 사람의 코드를 봤다. 생각 하나가 다른 점을 만든 것 같았다.
나는 어떻게 신고한 사람을 알아낼지 고민을 했다. 단순히 k번 이상 신고 당한 사람만 알게 된다면 그 사람은 누가 신고했을까?를 알기 위해 기록을 한 거고.
하지만 그럴 필요 없었다. 단순히 신고 당한 횟수를 기록하고, 그 이후는 for loop으로 report를 한 번 더 돌아서 if 신고당한 횟수 >=k 인 경우 report를 한 사람의 index를 answer에서 +1 해주면 끝나는 문제였다.