python, pyTorch/코딩테스트-파이썬

프로그래머스 Lv.1 신고 결과 받기

zooyeonii 2022. 2. 13. 02:29

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

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

입출력 예시

id_list report k result
["muzi", "frodo", "apeach",
"neo"]
["muzi frodo","apeach
frodo","frodo neo","muzi
neo","apeach muzi"]
2 [2,1,1,0]

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def solution(id_list, report, k):
    result, answer, rep = [], [], []
    report = set(report)
    report = sorted(list(report))
    count={}
 
    for i in report:
        i = i.split()[1]
        try : count[i] +=1
        except : count[i]=1
 
    for key, val in count.items():
        if val>=k:
            rep.append(key)
 
    for i in report:
        if i.split()[1in rep:
            result.append(i.split()[0])
 
    for i in range(len(id_list)):
        answer.append(result.count(id_list[i]))
 
    return answer
cs

설명

1. report는 "신고자  대상자" (ex. "muzi frodo") 로 이루어진다. 중복을 제거해줘야 하기 때문에 set(report) 후 다시 list로 전환한다. 

2. count 딕셔너리는 각 사용자가 신고 당한 횟수를 기록한다. 

3. 이 중 신고 당한 횟수가 k 이상이면, rep 에 추가한다. 

4. result는 메일을 받게 될 대상자(k번 이상 신고당한 사용자를 신고한 유저)를 기록한다. 

5. 최종적으로 id_list를 돌면서, result에 사용자의 이름이 몇 번 (메일 보내는 횟수) 있는지 확인한다.