김찬양의 개발일지
19일차. 신고 결과 받기 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/92334
문제
정답
def solution(아이디_리스트, 보고서, 신고횟수):
답안 = [0] * len(아이디_리스트)
보고서 = [신고내용.split() for 신고내용 in set(보고서)]
신고목록 = {사용자: [] for 사용자 in 아이디_리스트}
for 신고한유저, 신고당한유저 in 보고서:
신고목록[신고당한유저].append(신고한유저)
for 정지유저, 신고한목록 in filter(lambda 항목:len(항목[1]) >= 신고횟수, 신고목록.items()):
for 신고한유저 in 신고한목록:
답안[아이디_리스트.index(신고한유저)] += 1
return 답안
한번 한글로 코딩해보았다. 가독성은 이쪽이 더 좋은듯 하다.
풀이과정
답안 = [0] * len(아이디_리스트)
보고서 = [신고내용.split() for 신고내용 in set(보고서)]
신고목록 = {사용자: [] for 사용자 in 아이디_리스트}
가장 먼저 기초 list와 dict를 만들어준다.
답안은 사용자만큼, 보고서는 set으로 중복신고를 제거하고 split으로 분리, 신고목록은 각 사람당 빈 list가 들어가도록.
for 신고한유저, 신고당한유저 in 보고서:
신고목록[신고당한유저].append(신고한유저)
보고서를 순회를 돌면서, 신고목록에 각 사용자에대해 신고한유저의 이름을 넣어준다.
for 정지유저, 신고한목록 in filter(lambda 항목:len(항목[1]) >= 신고횟수, 신고목록.items()):
for 신고한유저 in 신고한목록:
답안[아이디_리스트.index(신고한유저)] += 1
외부 for를 보면 신고목록중 신고한 유저의 인원수가 신고횟수를 넘는 사람은 정지이므로 filter를 건 다음에, 그사람을 신고한 목록을 받는다.
신고 한번당 메일 하나이므로, 그 목록의 사용자의 index에 1을 더하면 그 사용자가 받을 메일이 나온다.
'코딩테스트 > Programmers Level 1' 카테고리의 다른 글
21일차. 최소직사각형 (0) | 2023.12.14 |
---|---|
20일차. 나머지가 1이 되는 수 찾기 (0) | 2023.12.13 |
18일차. 성격 유형 검사하기 (1) | 2023.12.12 |
17일차. 숫자 짝궁 (0) | 2023.12.10 |
16일차. 삼총사 (0) | 2023.12.09 |