신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.
각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.
id_list
에 있는 각 사용자를 키로 가지고 있는 딕셔너리 list_1
을 생성합니다. 이 딕셔너리는 각 사용자가 받은 신고를 추적하기 위한 용도입니다. 각 사용자는 신고된 사용자의 집합을 가지고 있습니다.list_1
에 업데이트합니다. 각각의 신고는 해당 사용자를 키로 가지는 딕셔너리의 값에 있는 집합에 추가됩니다.cnt_list
딕셔너리를 생성하여 각 사용자가 받은 신고의 수를 추적합니다. 이 딕셔너리는 모든 사용자에 대해 초기값이 0으로 설정됩니다.k
이상이라면 해당 사용자를 신고한 모든 사용자에 대해 신고 횟수를 증가시킵니다.이 알고리즘은 사용자가 신고를 받은 횟수를 효율적으로 추적하고, 신고 횟수가 일정 값 이상인 경우에 대해서만 처리하는 방식으로 동작합니다. 따라서 입력 데이터가 크더라도 효율적으로 작동할 수 있습니다.
def solution(id_list, report, k):
answer = [[] for _ in range(len(id_list))]
list_1 = {id_: set() for id_ in id_list}
cnt_list = {id_: 0 for id_ in id_list}
for i in range(0, len(report)):
f, t = report[i].split(' ')
list_1[t].add(f)
print(list_1)
for i in range(0, len(id_list)):
one = id_list[i]
num = len(list_1[one])
if k <= num:
for c in list_1[one]:
cnt_list[c] += 1
return list(cnt_list.values())
print(solution(["muzi", "frodo", "apeach", "neo"], ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"], 2))
print(solution(["con", "ryan"], ["ryan con", "ryan con", "ryan con", "ryan con"], 3))
list_1 = {id_: set() for id_ in id_list}
cnt_list = {id_: 0 for id_ in id_list}
키값으로 검색했을때 value를 빠르게 얻기 위해서 딕셔너리를 활용하였다.
return list(cnt_list.values())
초기화 하는 거는 항상 헤매는거 같당...ㅠㅠ