아이공의 AI 공부 도전기

[프로그래머스] Level 1 : 신고 결과 받기 (Python)

 

     

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/92334

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드 링크

https://github.com/stellaluminary/Programmers

 

GitHub - stellaluminary/Programmers

Contribute to stellaluminary/Programmers development by creating an account on GitHub.

github.com

Python

 

방법 1 (91.7/100점) 틀린 것은 시간 초과

 

하나의 리스트와 하나의 dict를 사용하여 필요한 부분에 대한 정리를 진행한다.

이후 res_s에 k개 보다 크거나 같은 ID를 찾아 해당 ID에 대해 저장된 User의 answer에 +1을 하는 작업을 처리한다.

 

def solution(id_list, report, k):
    report = list(set(report))
    l = [(i, []) for i in id_list]
    d = {i: 0 for i in id_list}

    for i in report:
        u, r = i.split()
        d[r] += 1
        for j in range(len(l)):
            if l[j][0] == u and r not in l[j][1]:
                l[j][1].append(r)

    res_s = []
    for i in d:
        if d[i] >= k:
            res_s.append(i)

    answer = [0] * len(id_list)

    for i in range(len(l)):
        for j in res_s:
            if j in l[i][1]:
                answer[i] += 1

    return answer

 

 

방법 2 

 

방법 1에서는 하나의 리스트와 하나의 dict를 사용했다면 방법 2에서는 2개의 dict를 통해 문제를 푼다.

 

def solution(id_list, report, k):
    report = list(set(report))
    l = {i: [] for i in id_list}
    d = {i: 0 for i in id_list}
    answer = [0] * len(id_list)

    for i in report:
        # user, report한 사람
        u, r = i.split()

        # d: 신고당한 ID의 누적 횟수 체크
        d[r] += 1

        # user가 신고한 ID 저장
        l[u].append(r)

    for id, n in d.items():
        # 만약 신고 누적 횟수가 k를 넘어간다면
        if n >= k:
            # 정지당할 id에 따른 메일 송신을 위해 각 user별 조사
            for user, rep in l.items():
                if id in rep:
                    answer[id_list.index(user)] += 1

    return answer

 

방법 3 

 

다른 사람의 코드로 가장 심플하고 직관적이다.

report에서 신고받은 ID에 대한 누적 횟수를 저장한 후 다른 for문에서 k개보다 크거나 같다면 해당 신고 ID를 가지는 User의 index를 찾아 +1하는 작업을 진행한다.

 

솔직히 답보고 놀람.

 

 

 

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

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading