코딩테스트 문제

[프로그래머스/Python] 신고 결과 받기

왕초보코딩러 2024. 1. 11. 00:14
728x90

문제

https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

중복된 신고 제외 k번 이상 신고된 사용자를 '신고한 사람'에게 메일 전송한 값을 리턴


set() 사용

report를 set()를 이용하여 중복 요소 제거

report를 split()하여 신고한 사람(리스트[0])과 신고 당한 사람(리스트[1])을 나눈다 ->  ["신고자 id1", "신고당한자 id1"]

2차원 배열 report 예시) [['frodo', 'neo'], ['apeach', 'frodo'], ['muzi', 'frodo'], ['muzi', 'neo'], ['apeach', 'muzi']]

#이용자 아이디/이용자 아이디 신고한 아이디/신고횟수
def solution(id_list, report, k):
    report = set(report)
    report = [r.split() for r in report]

 

딕셔너리 사용

신고당한 사람을 key로 딕셔너리 생성

value는 신고자의 id 인덱스

예시) {'frodo': [2, 0], 'muzi': [2], 'neo': [1, 0]}

    dic = {}
    for r in report:
        if r[1] in dic:
            dic[r[1]].append(id_list.index(r[0]))
        else:
            dic[r[1]] = [id_list.index(r[0])]

 

 

answer에 len(id_list)만큼의 배열을 만들어준다

딕셔너리를 순회하면서 len(dic[key])이 k 이상이면

신고자 인덱스에 +1씩

    answer = [0] * len(id_list)
    for key in dic:
        if len(dic[key]) >= k:
            for i in (dic[key]):
                answer[i] += 1

    return answer