1. 문제
문제 설명

제한사항
입출력 예시
입출력 예 설명
2. 풀이 과정
내가 생각한 진행 과정
- 동일한 유저에 대한 신고 횟수는 1회로 처리 ex) muzi가 frodo 두번 신고해도 한번 신고한거랑 동일 -> set을 이용해 중복제거
- report_result = {신고한사람: [신고당한사람]}
- report_result = {'muzi': ['neo', 'frodo'], 'frodo': ['neo'], 'apeach': ['frodo', 'muzi'], 'neo': []}
- warning_cnt = {신고당한사람 : 횟수}
- warning_cnt = {'muzi': 1, 'frodo': 2, 'apeach': 0, 'neo': 2}
- check_people은 k번 이상 신고당한 사람들 리스트
- result = [각 유저가 받은 결과 메일 수]
- 이때, check_people의 사람이 report_result의 리스트 안에 포함되어있으면 신고한 사람이 결과 메일을 받을 수 있음
- 따라서, 포함되어있다면, 신고한 사람 이름의 index를 id_list에서 찾아 그 index를 이용해 result에서 해당하는 위치에 메일수를 +1씩 진행
최종 코드
def solution(id_list, report, k):
report = set(report)
report_result = {i: [] for i in id_list}
warning_cnt = {i: 0 for i in id_list}
for re in report:
a, b = re.split(' ')
report_result[a].append(b)
warning_cnt[b] += 1
check_people = []
for name, cnt in warning_cnt.items():
if cnt >= k:
check_people.append(name)
result = [0] * len(id_list)
for id in id_list:
for check in check_people:
if check in report_result[id]:
result[id_list.index(id)] += 1
return result
발생했던 문제
- check_people의 사람이 report_result의 리스트 안에 포함되어있으면, 신고한 사람 이름의 위치에 메일수 +1 진행
- [사람리스트].index(신고한사람이름)를 하면 신고한 사람의 index를 알 수 있음
- result와 id_list(=사람리스트)의 index번호가 동일