CodingTest/Programers

[programers] 프로그래머스(파이썬) : 신고 결과 받기

JunJangE 2022. 4. 23. 00:52

문제

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr

알고리즘

- 딕셔너리 형으로 신고받은 사람을 카운트한다.

- 신고받은 사람의 횟수가 k개 이상일 경우 신고 한 사람을 카운트한다.

코드

def solution(id_list, report, k):
    id_dict = {i: 0 for i in id_list}
    report = list(set(report))
    for i in range(len(report)):
        a, b = report[i].split(" ")

        id_dict[b] += 1

    temp = []
    for j in id_list:
        if id_dict[j] >= k:
            temp.append(j)

    answer = {i: 0 for i in id_list}

    for i in range(len(report)):
        a, b = report[i].split(" ")

        for j in temp:
            if b == j:
                answer[a] += 1

    res = []
    for i in id_list:
        res.append(answer[i])


    return res

제한 시간을 두고 빠르게 풀다 보니 코드가 매우 지저분하다..

 

다른 사람 풀이

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

    # 중복을 제거한 report를 반복
    for i in set(report):
        id_dict[i.split()[1]] += 1 # 신고 받은 사람의 카운트

    # 중복을 제거한 report를 반복
    for j in set(report):
        if id_dict[j.split()[1]] >= k: # 신고 받은 사람이 k번 이상 받은 경우
            answer[id_list.idex(j.split[0])] += 1  # 신고 한 사람을 카운트

    return answer

다른 사람 풀이를 보면 정말 간단하게 코드가 나온다.

나도 좀 더 침착하게 코드를 짜야할 것 같다.

그래도 알고리즘의 경우 똑같은 방법으로 수행된 것 같다.

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com