코딩테스트/Programmers Level 1
19일차. 신고 결과 받기
자유로운영혼이다냥
2023. 12. 12. 23:52
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/92334
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
정답
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을 더하면 그 사용자가 받을 메일이 나온다.