[카카오] 신고 결과 받기

Tae-Kyun Kim·2022년 1월 20일
0
from functools import reduce
from collections import Counter

def solution(id_list, report, k):
    answer = [0 for _ in range(len(id_list))]
    users = {i:[] for i in id_list}
    for r in report:
        er, ee = r.split(' ')
        if ee not in users[er]:
            users[er] += [ee]
    total = list(reduce(lambda x,y:x+y, users.values()))
    for key, v in Counter(total).items():
        if v >= k:
            for i, val in enumerate(users.values()):
                if key in val:
                    answer[i] += 1
    return answer

후기

  • set 자료형을 활용하지 않아 너무 비효율적인 코드를 작성
  • {'user':'reported1', 'reported2', ..} 와 같은 형식으로 딕셔너리 작성할 필요 없었음
  • Counter 도 굳이 사용할 필요가 없었다고 생각

간단한 코드

https://github.com/algo4sik2/CoTe/blob/main/Programmers/2022-01/20/yejin.py

def solution(id_list, report, k):
    length = len(id_list)
    user = {x : 0 for x in id_list}
    answer = [0 for i in range(length)]
    
    # 신고 당한 유저의 신고 수 1씩 증가
    for i in set(report):
        user[i.split()[1]] += 1
        
    # k 보다 신고 많이 받았으면, 신고한 사람의 결과 1 증가
    for i in set(report):
        if user[i.split()[1]] >= k:
            answer[id_list.index(i.split()[0])] += 1
            
    return answer

0개의 댓글