본문 바로가기
코딩 테스트/프로그래머스

신고 결과 받기

by ornni 2024. 6. 7.
728x90
반응형

첫번째 코드

 

필요한 것들을 하나하나 만들어가면서 차차 진행하면 된다! 라고 생각했다...

일단 중복 데이터 제거하고!!!

이렇게 1, 2, 3, 4가 필요하다고 생각하고 진행했다!!

 

def solution(id_list, report, k):
    check = [[] for _ in range(len(id_list))]
    warning = [0] * len(id_list)
    stop = []
    mail = [0] * len(id_list)
    data = []

    # 중복 데이터 제거
    data1 = set()
    for i in report:
        data1.add(i)
    data1 = list(data1)

    # 데이터 내부 분리
    for i in range(len(data1)):
        data.append(data1[i].split(" "))

    # 신고 한 사람, 받은 사람 정리
    for i in data:
        for j in range(len(id_list)):
            if i[0] == id_list[j]:
                check[j].append(i[1])

    # 신고 받은 개수
    for i in data:
        for j in range(len(id_list)):
            if i[1] == id_list[j]:
                warning[j] += 1

    # 이용 정리 당하는 사람
    for i in range(len(warning)):
        if warning[i] >= k:
            stop.append(id_list[i])

    for i in stop:
        for j in range(len(check)):
            if i in check[j]:
                mail[j] += 1

    return mail

 

시간초과잉....


두번째 코드

 

불필요한 반복을 줄이자!! 라는 생각으로 진행했다!!

 

def solution(id_list, report, k):
    check = [[] for _ in range(len(id_list))]
    warning = [0] * len(id_list)
    stop = []
    mail = [0] * len(id_list)

    # 중복 데이터 제거
    report = list(set(report))

    # 데이터 내부 분리
    for i in range(len(report)):
        data = report[i].split(" ")

    # 신고 한 사람, 받은 사람 정리
        for j in range(len(id_list)):
            if data[0] == id_list[j]:
                check[j].append(data[1])
            if data[1] == id_list[j]:
                warning[j] += 1

    # 이용 정지 당하는 사람
    for i in range(len(warning)):
        if warning[i] >= k:
            stop.append(id_list[i])

    for i in stop:
        for j in range(len(check)):
            if i in check[j]:
                mail[j] += 1

    return mail

 

나아지긴 했지만 여전히 시간 초과;;;


세번째 코드

 

그러다 다른 분에게 물어봤더니 딕셔너리를 사용하면 용량을 더 줄일 수 있다!! 라고 하셔서

stop을 제외하고 나머지는 딕셔너리로 구성일 가능하므로 모두 변경하였다.

 

def solution(id_list, report, k):
    check = {id_:[] for id_ in id_list}
    warning = {id_:0 for id_ in id_list}
    stop = []
    mail = {id_:0 for id_ in id_list}

    # 중복 데이터 제거
    report = list(set(report))

    # 데이터 내부 분리
    for i in report:
        data = i.split(" ")
        sender = data[0]
        receiver = data[1] 
        
        if sender in check:
            check[sender].append(receiver)
        if receiver in warning:
            warning[receiver] += 1

    # 이용 정지 당하는 사람
    for id_, count in warning.items():
        if count >= k:
            stop.append(id_)

    for i in stop:
        for id_, receivers in check.items():
            if i in receivers:
                mail[id_] += 1

    return list(mail.values())

 

통과!

아고고.. 고생 많았다..!


링크

https://github.com/ornni/programmers/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/92334.%E2%80%85%EC%8B%A0%EA%B3%A0%E2%80%85%EA%B2%B0%EA%B3%BC%E2%80%85%EB%B0%9B%EA%B8%B0

 

programmers/프로그래머스/1/92334. 신고 결과 받기 at main · ornni/programmers

repository for recording Programmers Algorithm problem solving - ornni/programmers

github.com

 

반응형

'코딩 테스트 > 프로그래머스' 카테고리의 다른 글

행렬 테두리 회전하기  (0) 2024.06.09
둘만의 암호  (2) 2024.06.08
숫자 짝꿍  (0) 2024.06.06
N개의 최소공배수  (0) 2024.06.04
바탕화면 정리  (0) 2024.06.03