https://school.programmers.co.kr/learn/courses/30/lessons/92334
https://github.com/stellaluminary/Programmers
하나의 리스트와 하나의 dict를 사용하여 필요한 부분에 대한 정리를 진행한다.
이후 res_s에 k개 보다 크거나 같은 ID를 찾아 해당 ID에 대해 저장된 User의 answer에 +1을 하는 작업을 처리한다.
def solution(id_list, report, k):
report = list(set(report))
l = [(i, []) for i in id_list]
d = {i: 0 for i in id_list}
for i in report:
u, r = i.split()
d[r] += 1
for j in range(len(l)):
if l[j][0] == u and r not in l[j][1]:
l[j][1].append(r)
res_s = []
for i in d:
if d[i] >= k:
res_s.append(i)
answer = [0] * len(id_list)
for i in range(len(l)):
for j in res_s:
if j in l[i][1]:
answer[i] += 1
return answer
방법 1에서는 하나의 리스트와 하나의 dict를 사용했다면 방법 2에서는 2개의 dict를 통해 문제를 푼다.
def solution(id_list, report, k):
report = list(set(report))
l = {i: [] for i in id_list}
d = {i: 0 for i in id_list}
answer = [0] * len(id_list)
for i in report:
# user, report한 사람
u, r = i.split()
# d: 신고당한 ID의 누적 횟수 체크
d[r] += 1
# user가 신고한 ID 저장
l[u].append(r)
for id, n in d.items():
# 만약 신고 누적 횟수가 k를 넘어간다면
if n >= k:
# 정지당할 id에 따른 메일 송신을 위해 각 user별 조사
for user, rep in l.items():
if id in rep:
answer[id_list.index(user)] += 1
return answer
다른 사람의 코드로 가장 심플하고 직관적이다.
report에서 신고받은 ID에 대한 누적 횟수를 저장한 후 다른 for문에서 k개보다 크거나 같다면 해당 신고 ID를 가지는 User의 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