문제풀이/프로그래머스

[프로그래머스][Lv1] - 신고 결과 받기(파이썬/python)

얄루몬 2022. 5. 3. 11:33

from collections import defaultdict


def solution(id_list, report, k):
    answer = []

    #{신고 당한 애 : 신고당한 애한테 신고를 한 애들 목록}
    reportA = defaultdict(set)
    #{신고한 애: 신고한 애가 신고한 애들}
    reportB = defaultdict(set)
    
    #신고 목록 공복을 기준으로 신고한 사람(a) 신고 당한 사람(b)
    for i in report:
        a, b = i.split(" ")
        reportA[b].add(a)
        reportB[a].add(b)

    
    #모든 회원을 돌아가며 확인하는 작업
    for id in id_list:
        cnt = 0
        #신고한 사람이 K명이 넘을 때 cnt + 1 증가
        for i in reportB[id]:
            if len(reportA[i]) >= k:
                cnt += 1
        answer.append(cnt)
    return answer

 

[메모]

  • defaultdict()
    • 딕셔너리를 만드는 dict클래스의 서브 클래스이다.
    • 숫자, 리스트, 셋 등으로 초기화를 할 수 있다.
    • 기본값을 자동으로 넣어준다. (기본 dictionary의 경우엔 기본값을 직접 설정해주어야 한다.)
  • int_dict = defaultdict(int)
    • default 값이 int인 딕셔너리
  • add( ), append( ), extend( ), insert( )
    • add( ) - set(집합)의 원소 추가에 사용한다. 
      • append처럼 array 배열의 맨 뒤에 원소를 추가해준다.
    • append( ) - array 배열의 맨 뒤에 객체로 추가해준다.
    • extend( ) - iterable 자료형에 사용한다.
    • insert( )
      • array.insert(i, x) - 위치 i 앞에 추가할 값 x를 삽입 시킨다.
  • 자바의 Map이 파이썬의 dictionary 개념이다.( {키:값}으로 구성되고 키는 중복허용 X 값은 중복 허용 O)
  • 신고 당한 사람들의 목록을 돌면서 신고당한 사람을 신고한 사람이 k명 이상일 때 cnt를 +1 해준다.!!