문제
https://school.programmers.co.kr/learn/courses/30/lessons/92334
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
dict 형태로 신고당한 사람 : [ 신고한 사람 이름들 ] 형태로 데이터를 만든 뒤에, 그 데이터를 조회하면서 결과 값을 return 하면 쉽게 문제가 해결될 것 같았다.
예를 들자면 다음과 같이 신고가 들어온다면 가정한다.
유저 ID | 유저가 신고한 ID |
muzi | frodo |
apeach | frodo |
frodo | neo |
muzi | neo |
apeach | muzi |
해당 표를 내가 생각해 둔 dict 형태로 다음과 같이 나타낼 수 있다.
frodo : ['muzi', 'apeach']
neo : ['frodo', 'muzi']
muzi : ['apeach']
이를 파이썬 코드로 구현한다면 다음과 같이 나타낼 수 있다.
import collections
def solution(id_list, reports, k):
"""
id_list: 유저 리스트
report: 신고 한 내역
k: k 만큼 신고당하면 정지
return value: id_list을 순회하면서 정지가 된 사람의 수의 List 반환
"""
# 신고받음 사람 : [신고한 사람들]을 표현한 dict 형태로 만든다.
# if 문 처리를 통해 1번만 신고했는지 확인한다.
report_dict = collections.defaultdict(list)
for report in reports:
reporter, reported = report.split(" ")
if reporter not in report_dict[reported]:
report_dict[reported].append(reporter)
# id_list을 순회하면서 report_dict도 순회하는데, 신고한 사람수가 k이상이고
# 거기에 id 이름이 있을때 cnt을 증가하여 답을 구한다.
result = []
for id in id_list:
cnt = 0
for reporter in report_dict.values():
if len(reporter) >= k and id in reporter:
cnt += 1
result.append(cnt)
return result
'Algorithm > Programmers' 카테고리의 다른 글
프로그래머스 LV1 [1차] 비밀지도 (0) | 2023.05.17 |
---|---|
프로그래머스 LV1 짝지어 제거하기 (0) | 2023.05.17 |
프로그래머스 LV1 신규 아이디 추천 (0) | 2023.05.11 |
프로그래머스 LV1 과일 장수 (0) | 2023.05.11 |
프로그래머스 LV1 옹알이2 (0) | 2023.05.05 |