문제 설명
•
유저들이 서로를 신고한 기록을 바탕으로, 특정 횟수 이상 신고된 유저를 신고한 사람들이 처리 결과 메일을 몇 번 받게 되는지 계산하는 문제
◦
동일한 유저에 대한 신고 횟수는 1회로 처리한다.
◦
자기 자신을 신고할 수는 없다.
◦
유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 정지 메일을 발송한다.
예제 입력/출력
id_list | report | k | result |
["muzi", "frodo", "apeach", "neo"] | ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"] | 2 | [2,1,1,0] |
["con", "ryan"] | ["ryan con", "ryan con", "ryan con", "ryan con"] | 3 | [0,0] |
제약 조건
•
id_list는 이용자의 ID가 담긴 문자열 배열
◦
•
report는 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열
◦
◦
report의 원소는 “이용자id 신고한id” 형태의 문자열
•
k는 정지 기준이 되는 신고 횟수
문제 풀이
브루트 포스 -
풀이 코드
풀이1
•
풀이2
def solution(id_list, report, k):
st = set()
for r in report: # 중복된 데이터 제거
a, b = r.split()
st.add((a, b))
count = {name: 0 for name in id_list}
report_set = {name: set() for name in id_list}
for name1, name2 in st: # 신고 결과 반영
report_set[name1].add(name2)
count[name2] += 1
ans = []
for name in id_list: # 답 구하기
cnt = 0
for n in report_set[name]:
cnt += (count[n] >= k)
ans.append(cnt)
return ans
Python
복사