https://school.programmers.co.kr/learn/courses/30/lessons/92334?language=python3

 

TC 만 맞고 나머지 다 틀림. [해결]

'''
dict1  val 이 신고한 ID
ID 를 key, 신고한 ID VALUE

dict2  val 이 cnt 
ID를  key, val = 0 으로 초기화

dict1 에서 value값인 유저가 신고한 아이디를 key로 갖는 idx의 원소값 ++

id_list  탐색하면서, 해당 id_list 원소를 key로 갖는 dict1의 value를 인덱스를 갖는 dict2 cnt가
2개 이상이면 
dict3 [key]++

dict3의 value를 result에 append

dict 3개 필요

dict1 : report 용도
dic2 id_list cnt용도
dict3 은 cnt가 2개인 경우들을 찾아 vlaue에 +1 하는 용도
'''

#dict1 에서 value 중복 허용안키.
def solution(id_list, report, k):
    answer = []
    dict1 = dict()
    for x in report:
        lst = x.split(" ") # 하나의 딕셔너리 키의 value값 중복막아야함
        dict1.setdefault(lst[0],[]).append(lst[1])
# #https://stackoverflow.com/questions/20585920/how-to-add-multiple-values-to-a-dictionary-key
    
    for x in dict1: # 중복 제거.
        dict1[x] = set(dict1[x])
    
    dict2 = dict() 
    dict3 = dict()
    for x in id_list:
        dict2[x] = 0
    dict3 = dict2.copy()  # dict2,3 초기화
   
    '''
    dict 1에 값들을 dict2에 key로 활용하여 해당 key 값에 +=1 을 하기
    '''
    for x in dict1:
        for y in dict1[x]:
            dict2[y]+=1
    #dict3 은 cnt가 2개인 경우들을 찾아 vlaue에 +1 하는 용도
    
    #dict1의 원소 value들을 key로 하는 dict2 의 원소 값이 2이상인 경우 
    #dict3의 key값을 dict1 key로 하는 값에 ++
    for x in dict1:
        for y in dict1[x]:
           if dict2[y]>=k:  # if dict2[y]>=2  로해서 오답나왔던거임
              dict3[x]+=1
    #https://codechacha.com/ko/python-convert-dict-to-list/   
    answer = list(dict3.values())#dict ->list 변환
    return answer

cnt 가 k개 임 근데 적은건 2를 적어서 틀렸을거임(   if dict2[y]>=k:  # if dict2[y]>=2  로해서 오답나왔던거임)

 

재작성

설계는 거의 동일함. (코드 간략화)

def solution(id_list, report, k):
    answer = []
    #신고당한 횟수 dict1 , 초기화
    dict1= dict()
    for x in id_list:
        dict1[x]=0
    dict2 = dict1.copy()
    report = set(report) # 중복제거
    report = list(report)
    for x in report:
        lst = x.split(" ") # 0 : 신고한 사람 , 1: 신고당한사람.
        dict1[lst[1]]+=1  # 신고 당한 횟수 counting
    
    #report 탐색,신고당한 사람의 dict1 이 k값이상이면, dict2 에 ++
    for y in report: #report 는 중복제거됨 set으로
        lst = y.split(" ")
        if dict1[lst[1]]>=k: # lst[0]: 신고한자 , list[1] : 신고당한자
            dict2[lst[0]]+=1
    
    answer= list(dict2.values())
    return answer

+ Recent posts