알고리즘/프로그래머스
[프로그래머스, 파이썬, 구현] 신고 결과 받기
미소여우
2022. 5. 9. 11:15
728x90
사실 계속 스프링만 계속 파고 싶지만, 현실적으로는 코딩테스트도 준비해야기에 나름 꾸준히 풀어보고 있다.
친구가 한 문제씩 제시해줘서 풀고있는데, 문자열도 잘 다룰 줄 알아야하기에 다음 문제를 풀어 보았다.
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
신고횟수가 k이상일 때 신고자에게 신고 되었다고 알려주어야 한다.
문제를 보고 나서 클래스를 활용해서 사용자마다 상태를 유지해주는게 좋을거 같아 아래와 같이 구성해보았다.
from collections import OrderedDict
class User:
def __init__(self, username="", idx=0):
self.idx = idx
self.username = username
self.count = 0
self.report_list = []
def __str__(self):
return f"{self.username} {self.count} {self.report_list}"
def __repr__(self):
return f"{self.username} {self.count} {self.report_list}"
def solution(id_list, report, k):
answer = [0] * len(id_list)
user_dict = OrderedDict()
for idx, user in enumerate(id_list):
user_dict[user] = user_dict.get(user, User(user, idx))
for r in report:
reporting_user, reported_user = r.split(" ")
if reporting_user in user_dict[reported_user].report_list: continue
user_dict[reported_user].report_list.append(reporting_user)
user_dict[reported_user].count += 1
for key, user in user_dict.items():
if user.count >= k:
for reporting_user in user.report_list:
answer[user_dict[reporting_user].idx] += 1
return answer
이미 신고받은 유저는 카운트 안 되게 continue같은 처리도 필요하다.
728x90