bit가 눈 앞에서 왔다갔다

Py) 프로그래머스 92334 신고 결과 받기 본문

Algorithm/Prob

Py) 프로그래머스 92334 신고 결과 받기

헬린인형 2022. 2. 28. 01:29

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

 

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

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

programmers.co.kr

def solution(id_list, report, k):
    answer = []
    warn = {}
    monitor = []

    # key 만들어주기
    for list in id_list:
        warn[list] = [0, [], 0]

    # key에 value 넣어주고 걸릴때마다 +1 해주기
    for name in report:
        name = name.split()
        if name[1] not in warn[name[0]][1]:    # 이미 신고 당한 적 없으면 신고횟수 올려주기
            warn[name[1]][0] += 1
        warn[name[0]][1].append(name[1])

    for find in warn:
        if warn[find][0] >= k:     # 신고 당한 횟수가 k보다 크거나 같다면
            for check in warn:
                if find == warn[check]: break
                else:
                    if find in warn.get(check)[1]:    # 신고한 이력이 있음
                        warn[check][2] += 1

    for i in warn:
        answer.append(warn[i][2])

    return answer

 

레벨1이긴 했는데 딕셔너리에 익숙하지 않아서 시간이 걸림

그걸 떠나서도 잘 짠 것 같은 느낌은 없긴 하다.

 

그래서 다른 사람 소스도 확인해서 다시 짜 봄

def solution(id_list, report, k):
    answer = [0] * len(id_list)
    idx_of = {}
    reporters = [set() for _ in range(len(id_list))]

    for name in range(len(id_list)):
        idx_of[id_list[name]] = name

    for name in report:
        rpter, rpted = name.split()
        reporters[idx_of[rpted]].add(idx_of[rpter])

    for i in range(len(id_list)):
        if len(reporters[i]) >= k:
            for j in reporters[i]:
                answer[j] += 1

    return answer

    return answer

아이디를 인덱스로 반환하는게 너무 좋은 생각인 거 같다,,

나도 문제 푸는 내내 인덱스가 간절했음,,

이건 진짜 그냥 외우고 싶었다.

반응형
Comments