ALGORITHM
프로그래머스 | 2022 KAKAO BLIND RECRUITMENT | 신고 결과 받기 (Python)
진미
2024. 9. 21. 20:52
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
내 코드
def solution(id_list, report, k):
# 각 유저의 신고 결과를 저장할 리스트 (메일 받은 횟수)
answer = [0] * len(id_list)
# 각 ID별로 신고당한 횟수를 카운트
reported_by_ID = [0] * len(id_list)
# 유저 ID를 노드로 가지는 가중치가 없는 단방향 그래프
# 인접 리스트를 중복 없이 처리하기 위해 set 사용
report_dict = {reporter: set() for reporter in id_list}
# ID를 인덱스로 접근하기 위해 ID와 인덱스 매핑
id_to_index = {user: i for i, user in enumerate(id_list)}
# 신고 처리
for r in report:
reporter, reported = r.split()
report_dict[reporter].add(reported)
# 신고 당한 횟수 카운트
for reported_set in report_dict.values():
for reported in reported_set:
reported_by_ID[id_to_index[reported]] += 1
# 정지당한 리스트
banned_list = [i for i, count in enumerate(reported_by_ID) if count >= k]
# 딕셔너리를 돌면서 신고된 유저를 신고했으면 answer에 +1
for reporter, reported_set in report_dict.items():
for reported in reported_set:
if id_to_index[reported] in banned_list:
answer[id_to_index[reporter]] += 1
return answer
enumerate를 적극 활용해보았다
헷갈려 죽겠네
반응형