신고 결과 받기(https://school.programmers.co.kr/learn/courses/30/lessons/92334)
하.. 고통 스럽다ㅠ 삽질 한시간 하고 안되겠어서 해설봄
내가 접근한 방법은
1. id_list 기준으로 신고횟수 카운트 할 맵 생성하기
2. report의 "신고자 피신고자" 형태를 맵으로 변경 후
3. 맵으로 바뀐 report에서 신고자별로 피신고자 누구인지 카운트..
하려고 했는데 이번문제에서 맵을 사용하는건 맞는데 내가 생각한 방법으로 변경하는건 NG다.
왜냐면 맵에서 같은 key 값이 있으면 value 는 가장 최근에 넣어진 value 값만 보관하기에, 한 유저가 여러번 신고한 경우 가장 나중에 신고당한 값만 남게되니까
신고한 사람은 중복을 허용하지 않는 set 형식으로 받아봐야 함
암튼 답은 이거다... 너무 어렵다 ㅠㅠ
def solution(id_list, report, k):
# id_list를 기준으로 신고자 카운트 맵으로 바꿈
user_list = {}
for user_id in id_list: #유저 기준으로 날 신고한 사람 리스트랑, 메일 발송 횟수를 받아봄
user_list[user_id] = {"reported_me": set(), "mail": 0}
# user_list = {id:{"reported_me":set(),"mail":0} for id in id_list} 컴프리헨션으로 쓰면 일케
for rep in report:
rep = rep.split(" ") #rep[0] 신고한 유저, #rep[1] 신고당한 유저
user_list[rep[1]]["reported_me"].add(rep[0])
# 'muzi': {'reported_me': {'apeach'}, 'mail': 0} 이런식의 맵을 항목으로 가지는 리스트가 생김
for key in user_list:
#날 신고한 유저의 수가 K값 이상이면 날 신고한 유저들의 mail값 1씩 추가하기
if (len(user_list[key]["reported_me"]) >= k):
for user in user_list[key]["reported_me"]:
user_list[user]["mail"] += 1
#처리 결과 메일을 받은 횟수
answer = []
for value in user_list.values():
answer.append(value["mail"])
# mail_values = [value["mail"] for value in user_list.values()]
# 이렇게 컴프리헨션 방식으로 도 쓸수 있음
return answer