본문 바로가기

프로그래머스

[프로그래머스] 2022 KAKAO BLIND RECRUITMENT - 신고 결과 받기

반응형

 

스타의 풀이

def solution(id_list, report, k):
    answer = [0] * len(id_list)    
    reports = {x : 0 for x in id_list}

    for r in set(report):
        reports[r.split()[1]] += 1

    for r in set(report):
        if reports[r.split()[1]] >= k:
            answer[id_list.index(r.split()[0])] += 1

    return answer

 

나의 코드

from dataclasses import dataclass
from typing import List, TypeVar

T = TypeVar('T')

@dataclass
class User:
    id: str
    targets: List[T]
    report_count: int = 0
    
    def __init__(self, id):
        self.id = id
        self.targets = list()
    
    def report_count_increment(self):
        self.report_count += 1
        
    def append_target(self, user: T):
        self.targets.append(user)
        
    def is_out(self, k: int) -> bool:
        if self.report_count >= k:
            return True
        return False
    


def solution(id_list, report, k):
    answer = []
    
    users = list()
    report = set(report)
    
    for id in id_list:
        users.append(User(id=id))
    
    for re in report:
        splited_report = re.split(' ')
        user = get_user_by_id(users, splited_report[0])
        target = get_user_by_id(users, splited_report[1])
        target.report_count_increment()
        user.append_target(target)
    
    for user in users:
        cnt = 0
        for target in user.targets:
            if target.is_out(k):
                cnt += 1
        answer.append(cnt)

    return answer

def get_user_by_id(users: List[User], id: str):
    for user in users:
        if user.id == id:
            return user

 

 

느낀 점

더보기

find처럼 특정 키워드를 가지고 인덱스를 가져오는 list.index() 메소드에 대해서 새롭게 배웠다.

반응형