문제 설명

문제가 1단계치곤 조금 복잡합니다. solution 함수가 받는 인자는 다음과 같습니다. id_list, report, k 이 인자들에 대해서 설명을 하자면 id_list에는 총 이용 유저의 아이디가 들어있습니다. 예를 들어, ["muzi", "frodo", "apeach", "neo"] 와 같은 형식으로 들어있습니다. report 변수에는 ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"] 다음과 같은 형식의 값들이 들어있는데 앞에 있는 id는 신고를 한 사람이고 뒤에 있는 사람은 신고를 받은 사람입니다. 그리고 신고를 많이 받게 된다면 당연히 제재가 가해지겠죠? 또 신고를 한 사람은 신고가 접수되었다는 메일을 받게 될 것 입니다. 이 기준이 k 입니다. k번 이상 신고를 받게 된다면 제재가 가해지는 것 입니다.

코드

answer = [0] * len(id_list)
reported = [0] * len(id_list)
check = [[0 for i in range(len(id_list))] for j in range(len(id_list))]

우선 다음과 같은 변수를 만들어 주었습니다. answer는 답으로써 반환할 변수이고 reported는 신고를 몇 번 받았는지 알려주는 list입니다. check 는 2차원 list로 누가 누구에게 신고했는지 알게 하기 위해서 만들었습니다.

for i in report:
        a, b = i.split()
        A = id_list.index(a)
        B = id_list.index(b)
        if check[A][B] == 0:
            check[A][B] = 1
            reported[B] += 1

다음 코드를 통해서는 check 를 사용해서 누가 누구를 신고했는지 2차원 list로 저장해보았습니다. report에서 하나의 변수 i를 받아서 그 변수를 띄어쓰기로 나누어주는 split()을 사용하여 A를 신고한 사람 B를 신고받은 사람의 아이디의 인덱스로 하였습니다. 이를 check에 저장하게 된다면 해당 ID의 인덱스에 해당하는 사람은 a에게 신고를 받은 사람이 됩니다.
이 변수를 사용하여

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

다음과 같이 연산을 하여 이 사람이 체크 되었고 신고 회수가 k번을 넘게 된다면 answer에 += 1 을 해주게 됩니다. 그렇게 된다면 그 사람이 몇번이나 제재를 당했는지 알 수 있게 됩니다.

전체 코드를 보게 된다면 다음과 같습니다.

def solution(id_list, report, k):
    answer = [0] * len(id_list)
    reported = [0] * len(id_list)

    check = [[0 for i in range(len(id_list))] for j in range(len(id_list))]
    for i in report:
        a, b = i.split()
        A = id_list.index(a)
        B = id_list.index(b)
        if check[A][B] == 0:
            check[A][B] = 1
            reported[B] += 1

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

    return answer

혹여나 이 문제에 어려움이 있는 사람들에게 도움이 됐길 바라면서 글을 마치겠습니다. 읽어주셔서 감사합니다.

문제 링크

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

profile
안알랴줌

0개의 댓글