Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

김찬양의 개발일지

19일차. 신고 결과 받기 본문

코딩테스트/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을 더하면 그 사용자가 받을 메일이 나온다.

 

 

'코딩테스트 > 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