[프로그래머스 Lv1.] 신고 결과 받기(python)

gayoung·2022년 3월 12일
0

알고리즘

목록 보기
1/50
post-thumbnail

1. 문제

문제 설명

제한사항

입출력 예시

입출력 예 설명


2. 풀이 과정

내가 생각한 진행 과정

  • 동일한 유저에 대한 신고 횟수는 1회로 처리 ex) muzi가 frodo 두번 신고해도 한번 신고한거랑 동일 -> set을 이용해 중복제거
  • report_result = {신고한사람: [신고당한사람]}
    • report_result = {'muzi': ['neo', 'frodo'], 'frodo': ['neo'], 'apeach': ['frodo', 'muzi'], 'neo': []}
  • warning_cnt = {신고당한사람 : 횟수}
    • warning_cnt = {'muzi': 1, 'frodo': 2, 'apeach': 0, 'neo': 2}
  • check_people은 k번 이상 신고당한 사람들 리스트
  • result = [각 유저가 받은 결과 메일 수]
    • 이때, check_people의 사람이 report_result의 리스트 안에 포함되어있으면 신고한 사람이 결과 메일을 받을 수 있음
    • 따라서, 포함되어있다면, 신고한 사람 이름의 index를 id_list에서 찾아 그 index를 이용해 result에서 해당하는 위치에 메일수를 +1씩 진행

최종 코드

def solution(id_list, report, k):
    report = set(report)  # 동일한 유저에 대한 신고 횟수는 1회로 처리
    report_result = {i: [] for i in id_list}
    warning_cnt = {i: 0 for i in id_list}

    for re in report:
        a, b = re.split(' ')
        report_result[a].append(b)
        warning_cnt[b] += 1

	# k번 이상 신고당한 사람들 리스트
    check_people = []
    for name, cnt in warning_cnt.items():
        if cnt >= k:
            check_people.append(name)
	
    # 유저가 받은 결과 메일 수
    result = [0] * len(id_list)
    for id in id_list:
        for check in check_people:
            if check in report_result[id]:
                result[id_list.index(id)] += 1

    return result

발생했던 문제

  • check_people의 사람이 report_result의 리스트 안에 포함되어있으면, 신고한 사람 이름의 위치에 메일수 +1 진행
    • [사람리스트].index(신고한사람이름)를 하면 신고한 사람의 index를 알 수 있음
    • result와 id_list(=사람리스트)의 index번호가 동일

0개의 댓글

관련 채용 정보