문제 링크
내 풀이
def solution(id_list, report, k):
report2 = list(set(report))
singo_count= {}
singo_dict = {}
users = []
k_up = []
result = []
for user in id_list:
singo_count[user] = 0
singo_dict[user] = []
for singo in report2:
user_id, singo_id = singo.split()
singo_dict[user_id].append(singo_id)
singo_count[singo_id] += 1
for user in singo_count:
if singo_count[user] >= k:
k_up.append(user)
# singo_dict의 values와 k_up의 교집합 len 구하기
for singo in singo_dict:
result.append(len(set(singo_dict[singo]) & set(k_up)))
return result
- 시작부터 report에 set함수를 적용하여 중복된 신고를 방지
다른 풀이
def solution(id_list, reports, k):
user_list = {id:{"reported_me":set(),"mail":0} for id in id_list}
#user_list = {
# "아이디": {
# "나에게 신고한 유저": set(), #중복제거를 위해 set()사용
# "신고 성공(mail을 받을 횟수)": 0,
# }
#}
for report in reports:
report = report.split(" ")
#report[0] 신고한 유저
#report[1] 신고당한 유저
user_list[report[1]]["reported_me"].add(report[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
mail_values = [value["mail"] for value in user_list.values()]
#user_list에서 "mail"값만 추출
return mail_values
출처: https://1ets-just-do-it.tistory.com/9 [파이썬은 신이야🔥🔥🔥:티스토리]
풀이 해석
- user_list를 자신을 신고한 유저와 신고 성공한 횟수를 저장할 value로 나누어 dict를 만들었다
- 이때 자신을 신고한 유저가 동일유저일 경우 겹치는 것을 방지하기 위해 set함수를 이용
- 그 이후 len(set)이 k가 넘을 경우 신고한사람의 mail value가 1씩 증가하게 하여
최종적으로 mail value값만을 추출하여 list를 만들었다
배울 점
- dict 타입안에 value를 나눈 형태로 만든 사고
- 신고한 유저와 성공한 횟수를 value로 이용한 사고
- 안겹치게 하기 위해 set 함수를 이용
또 다른 풀이
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
풀이 해석
- set(report)를 통해 중복된 신고 방지
- id_list.index를 통해 answer의 값을 수정한 후 answer를 리턴하였다
배울 점
- set 함수를 통한 report의 중복 방지
- reports = {x:0 for x in id_list}를 통해 빠른 dict 생성
- [0] * len(id_list)를 통한 공간 활용
- r.split()[1] 이와같이 함수 호출과 동시에 바로 활용하는 간결함
댓글남기기