링크
내 풀이(O)
- 신고 대상을 key로, 신고한 유저의 이름들을 value로 갖는 dictionary를 만든다 =>
id_dict
- value의 길이가 정지기준(k)를 넘는 경우의 신고한 유저들의 배열을 만든다 =>
over_k
- flat한 리스트에서 각 유저의 개수를 구한다
import itertools
def solution(id_list, report, k):
id_dict = { id: [] for id in id_list }
for r in set(report):
[sub, obj] = r.split(' ')
id_dict[obj] += [sub]
over_k = [sub for sub in id_dict.values() if (len(sub) >= k)]
flat_list = list(itertools.chain(*over_k))
return [flat_list.count(id) for id in id_list]
다른 풀이
- 유저 id를 key로, 신고당한 횟수를 value로 가지는 dictionary를 만든다
- 신고당한 횟수가 정지기준을 넘은 경우의 신고한 유저들의 index를 찾아 1씩 더해준다
def solution(id_list, report, k):
answer = [0] * len(id_list)
reports = {x : 0 for x in id_list}
for r in set(report):
reports[r.split()[1]] += 1
for r in set(report):
if reports[r.split()[1]] >= k:
answer[id_list.index(r.split()[0])] += 1
return answer
검증용 코드
id_list = [["muzi", "frodo", "apeach", "neo"], ["con", "ryan"]]
report = [["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"], ["ryan con", "ryan con", "ryan con", "ryan con"]]
k = [2, 3]
result = [[2,1,1,0], [0,0]]
for idx in range(len(result)):
print(idx, '성공' if solution(id_list[idx], report[idx], k[idx]) == result[idx] else "실패")