문제
신고 결과 받기
조건 정리
1) 2개의 리스트와 1개의 양의 정수를 인잘 받는다.
2) 양의 정수로 이루어진 리스트를 반환한다.
3) id_list는 ["muzi", "frodo", "apeach", "neo"] 처럼 이루어져 있다.
4) report는 띄어쓰기를 기준으로 앞이 신고자, 뒤가 피신고자로 이루어져 있다.
["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"]
내 풀이
def solution(id_list, report, k):
answer = []
reporters = [report[i].split(' ')[0] for i in range(len(report))]
reportees = [report[i].split(' ')[1] for i in range(len(report))]
no_overlap_reportees = list(set(reportees))
reportees_nums = [reportees.count(id) for id in no_overlap_reportees]
reportees_and_nums = {
reportees : nums for reportees, nums in zip(no_overlap_reportees, reportees_nums)
}
over_reportees = []
for key, value in reportees_and_nums.items():
if value >= 2:
over_reportees.append(key)
ters_tees = {}
for reporter, reportee in zip(reporters, reportees):
if ters_tees[reporter] == reportee
ters_tees[reporter] = reportee
return answer
- 결과적으로는 풀지 못했다.
- 풀지 못한 이유는 id_list, report, k가 서로 연결될 수 있게 리스트나 딕셔너리에 넣어야 되는데 그렇지를 못했다.
- 가장 큰 이유는 report에서 한 명의 신고자가 여러 명의 피신고자와 연결되어 있는데 이를 딕셔너리에 value 값으로 리스트를 선언해서 여러 개의 값을 넣는 방법을 몰랐기 때문이다.
다른 풀이
from collections import defaultdict
def solution(id_list, report,k):
answer = []
report = list(set(report))
user = defaultdict(set)
cnt = defaultdict(int)
for r in report:
a,b = r.split()
user[a].add(b)
cnt[b] += 1
print(f"user : {user}")
print(f"cnt : {cnt}")
for i in id_list:
result = 0
for u in user[i]:
if cnt[u]>=k:
result +=1
answer.append(result)
return answer
defaultdict
특징
- 딕셔너리와 작동 방식은 거의 동일하다
- defaultdict()의 인자로 주어직 객체의 기본값을 딕셔너리값의 초기값으로 지정할 수 있다(int, list, set 등)
int
from collections import defaultdict
int_dict = defaultdict(int)
int_dict
>> defaultdict(<class 'int'>, {})
int_dict['key1']
>> 0
defaultdict(<class 'int'>, {'key1': 0})
- 위와 같이 key값인 key1만 주고 value를 주지 않을 경우 0을 default value로 할당한다.
list
from collections import defaultdict
list_dict = defaultdict(list)
list_dict
>> defaultdict(<class 'list'>, {})
list_dict['key1']
>> []
list_dict['key2'] = 'test1'
list_dict['key3'] = 'test2'
list_dict['key3'].append('test3')
defaultdict(
<class 'list'>,
{
'key1': [],
'key2' : 'test',
'key3' : ['test1', 'test2']
}
)