[Programmers] 카카오 1번

Seon_shine·2022년 1월 21일
0

programmers

목록 보기
1/4

1차 풀이

def solution(id_list, report, k):
    find=[]
    dic={}
    for i in range(len(report)):
        lst=report[i].split()
        find.append(lst) # a가 b를 신고했다를 [a,b]식으로 다 넣음.
        
    s=set(list(map(tuple,find))) 중복된 것들 제거.
    for se in s:
        if(se[1] not in dic):
            dic[se[1]]=1 #신고당한 횟수 세는 logic
        else:
            dic[se[1]]+=1
    mail=[]
    for key in dic:
        if(dic[key]>=k):
            mail.append(key) #신고당한 횟수가 k번을 넘어가면 mail에 추가.
    answer = {}
    for se in s:
        if se[1] in mail:
            if se[0] not in answer:
                answer[se[0]]=1
            else:
                answer[se[0]]+=1 #메일 받을 사람 횟수 count
    result=[]
    for i in id_list:
        if i in answer:
            a=answer.get(i)
        else:
            a=0
        result.append(a)
    return result

1차 풀이 후기: python에 미숙해서 그런지 코드가 너무 중구 난방이고 이해하기가 힘들었다.

2차풀이

def solution(id_list, report, k):
 answer = []
 count={name:0 for name in id_list} # 이름마다 0으로 초기화
 dic={name:[] for name in id_list} # 빈 list로 초기화
 s=set(report) #처음부터 report에서 중복값 제거
 for se in s:
     a=se.split()[0]
     b=se.split()[1]
     dic[b].append(a) #b가 a에 의해 신고당함.
 for i in dic:
     if(len(dic[i])>=k): #k번 이상 신고당한 user
         for j in dic[i]: #신고당한 user을 신고한 j
             count[j]+=1
 for i in count:
     answer.append(count[i]) #mail 몇번 받았는지 answer에 추가.
 return answer
 

 
 

profile
모든 생각을 구현해내기 위해 노력하는 개발자

0개의 댓글