Search

PGS 신고 결과 받기

URL
태그
구현
브루트포스 알고리즘

문제 설명

유저들이 서로를 신고한 기록을 바탕으로, 특정 횟수 이상 신고된 유저를 신고한 사람들이 처리 결과 메일을 몇 번 받게 되는지 계산하는 문제
동일한 유저에 대한 신고 횟수는 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가 담긴 문자열 배열
2id_list1,0002 ≤ |id\_list| ≤ 1,000
report는 각 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열
1report200,0001 ≤ |report| ≤ 200,000
report의 원소는 “이용자id 신고한id” 형태의 문자열
k는 정지 기준이 되는 신고 횟수

문제 풀이

브루트 포스 - O(report+id_list)O(|report| + |id\_list|)

풀이 코드

풀이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
복사