본문 바로가기

알고리즘/Lv. 1

프로그래머스 92334 신고 결과 받기 파이썬 풀이

728x90

난이도 : Lv. 1

풀이일 : 2411015

https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


문제


아이디어

  • id_list의 인덱스를 활용해서 문자열을 숫자처럼 사용하자
  • complain 2차원 배열을 만들어, 각 이용자가 신고한 사람의 정보를 저장한다.
  • complain 저장 시, count에 신고 당한 사람의 신고 당한 횟수를 저장한다.
  • 이용자별로 신고한 사람 중 총 신고 횟수가 k 이상인 사람의 수를 출력한다.

전체 풀이 코드

def solution(id_list, report, k):
    answer = [0] * len(id_list)
    count = [0] * len(id_list) // 신고당한 횟수
    complain = [[] for _ in range(len(id_list))] # 신고한 사람들
    
    # 신고정보 입력 처리
    for i in range(len(report)):
        r, t = map(str, report[i].split())
        
        # id_list의 인덱스로 이름을 숫자처럼 사용
        if t not in complain[id_list.index(r)]:
            complain[id_list.index(r)].append(t)
            count[id_list.index(t)] += 1
    
    # 내가 신고한 사람들의 신고 횟수 확인 및 기록
    for i in range(len(id_list)):
        for j in complain[i]:
            if count[id_list.index(j)] >= k:
                answer[i] += 1
    
    return answer

상세 풀이 코드

def solution(id_list, report, k):
    answer = [0] * len(id_list)
    count = [0] * len(id_list)
    complain = [[] for _ in range(len(id_list))]
  • answer : 내가 신고한 사람 중 정지된 사람의 수
  • count : 내가 신고당한 횟수
  • complain : 내가 신고한 사람들 정보

 

    for i in range(len(report)):
        r, t = map(str, report[i].split())
        if t not in complain[id_list.index(r)]:
            complain[id_list.index(r)].append(t)
            count[id_list.index(t)] += 1
  • r, t : 신고한 사람, 신고 받은 사람
  • 동일한 사람은 한 번만 신고할 수 있으므로, 이전에 추가한 적이 없는지 확인
  • 처음 추가하는 사람은 complain에 기록하고, 신고당한 사람 count 추가

 

    for i in range(len(id_list)):
        for j in complain[i]:
            if count[id_list.index(j)] >= k:
                answer[i] += 1
    
    return answer
  • 각 사람이 신고한 사람들을 이중 반복하며, 해당 이용자가 신고한 이용자가 계정 중지 되었을 경우 answer + 1

느낀점

  • 처음에는 people이라는 이름의 딕셔너리를 만들고, 이용자의 이름과 숫자를 함께 넣어서 이름이 사용되는 곳에서 딕셔너리를 이용해 접근했는데, id_list가 주어지니까 그렇게 하지 않아도 되어서 수정했다.
  • 파이썬 인덱스를 아주 오랜만에 써봐서 조금 헤맸는데, 역시 처음 풀고 나서 어디 고칠 데 없나 살펴보는 과정이 더 재밌고 공부가 되는 느낌이다.