1차 풀이
def solution(id_list, report, k):
find=[]
dic={}
for i in range(len(report)):
lst=report[i].split()
find.append(lst) # a가 b를 신고했다를 [a,b]식으로 다 넣음.
s=set(list(map(tuple,find))) 중복된 것들 제거.
for se in s:
if(se[1] not in dic):
dic[se[1]]=1 #신고당한 횟수 세는 logic
else:
dic[se[1]]+=1
mail=[]
for key in dic:
if(dic[key]>=k):
mail.append(key) #신고당한 횟수가 k번을 넘어가면 mail에 추가.
answer = {}
for se in s:
if se[1] in mail:
if se[0] not in answer:
answer[se[0]]=1
else:
answer[se[0]]+=1 #메일 받을 사람 횟수 count
result=[]
for i in id_list:
if i in answer:
a=answer.get(i)
else:
a=0
result.append(a)
return result
1차 풀이 후기: python에 미숙해서 그런지 코드가 너무 중구 난방이고 이해하기가 힘들었다.
2차풀이
def solution(id_list, report, k):
answer = []
count={name:0 for name in id_list} # 이름마다 0으로 초기화
dic={name:[] for name in id_list} # 빈 list로 초기화
s=set(report) #처음부터 report에서 중복값 제거
for se in s:
a=se.split()[0]
b=se.split()[1]
dic[b].append(a) #b가 a에 의해 신고당함.
for i in dic:
if(len(dic[i])>=k): #k번 이상 신고당한 user
for j in dic[i]: #신고당한 user을 신고한 j
count[j]+=1
for i in count:
answer.append(count[i]) #mail 몇번 받았는지 answer에 추가.
return answer