눈송이의 개발생활
[Programmers Lv.1]신고 결과 받기 (Python) 본문
문제
https://programmers.co.kr/learn/courses/30/lessons/92334
내 코드
def solution(id_list, report, k):
# 받을 이메일 개수
answer = {id: 0 for id in id_list}
# key = 신고 당함, value : 신고함
r = {id: [] for id in id_list}
# 리스트 내 중복되는 값 무시하기 위해서
report = list(set(report))
for i in range(len(report)):
user, warn = report[i].split()
r[warn].append(user)
for item, value in r.items():
if len(value) >= k:
for key in value:
answer[key] += 1
return list(answer.values())
다른 사람 풀이
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
해결 방법
2개의 dictionary를 사용했다.
answer : key = 신고한 사람, value = 받을 이메일 개수
r : key = 신고 당한 사람, value = 신고한 사람들(list)
report를 set으로 만든 뒤 다시 list로 만든 이유는 set은 중복 원소를 제거해주기 때문이다.
신고당한 사람의 value인 list에 신고한 사람의 이름을 append한다.
그리고 k보다 value의 길이(신고한 사람의 수)가 크면 신고한 사람에게 보낼 이메일의 수를 증가시킨다.
어려운 문제는 아니였지만 사전에 익숙하지 않아서 많이 헤맸다.
✅ dictionary의 value에는 list도 들어갈 수 있음
✅ 연결 요소들이 다양하면 여러 개의 리스트나 사전을 만들어서 풀어야 함
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers Lv.1]로또의 최고 순위와 최저 순위(Python) (0) | 2022.03.29 |
---|---|
[Programmers Lv.1]실패율 (Python) (0) | 2022.03.28 |
[Programmers Lv.1]크레인 인형 뽑기 (Python) (0) | 2022.03.26 |
[Programmers Lv.1]키패드 누르기 (Python) (0) | 2022.03.23 |
[Programmers Lv.1]숫자 문자열과 영단어 (Python) (0) | 2022.03.23 |
Comments