문제 (2022 카카오 블라인드 채용)
- 게시판 이용자는 타 이용자를 신고한다.
- 동일 신고건은 1건으로 처리한다.
- k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 유저들은 신고 결과를 받는다.
- 모든 신고 내용을 취합하여 마지막에 한꺼번에 결과를 전송한다.
# Example
id_list = ['muzi', 'frodo', 'apeach', 'neo']
report = ['muzi frodo', 'apeach frodo', 'frodo neo', 'muzi neo', 'apeach muzi']
k = 2
# frodo 2회 신고 당함 -> k 이상이므로 frodo 신고자에게 결과 발송
# neo 2회 신고 당함 -> 신고자에게 결과 발송
# muzi 1회 신고 당함 -> k 미만이므로 결과 발송 안함.
result = [2,1,1,0]
풀이
def solution(id_list, report, k):
d = {} # 피신고자 : {신고자 집합}
score = {} # 유저 : 결과 메일 갯수
for user in id_list:
d[user] = set()
score[user] = 0
for r in report:
reporter, reported = r.split(' ')
d[reported].add(reporter)
for v in d.values():
if len(v) >= k:
for user in v:
score[user] += 1
return [v for v in score.values()]
해설
동일 신고건은 1회로 처리해야하므로 set()을 사용한다.
split() 함수로 신고자와 피신고자를 얻은 다음 피신고자(reported)를 dict()의 key로, 신고자 집합({reporter1, reporter2, ...})를 value로 한다.
value인 set()의 length가 k 이상이면 신고자의 수취 메일 갯수를 +1 한다.
이 수취 메일 갯수 dict()를 순서대로 list()로 만들어 return한다.
dict()와 set()에 대한 이해가 필요한 비교적 쉬운 문제였습니다.
'개발' 카테고리의 다른 글
Poetry (0) | 2022.09.25 |
---|---|
pyinstaller로 exe format 실행파일 만들기 (1) | 2022.08.17 |
[프로그래머스]주차 요금 계산 - Python (0) | 2022.05.10 |
Pololu - Tic Stepper Moto Controller (스텝모터 컨트롤러) (0) | 2022.04.29 |
[내가만든]당번 정하기 (0) | 2022.04.26 |