- 문제 : 링크

 

Level1 문제이고, 스스로 푼 문제다!

문제 처음에 읽었을 때는 좀 복잡하다 생각했는데, 천천히 풀다보니 정답이 떴다. 걸린 시간은 30분 정도 

 

신고를 한 사람에 대해서 해당 사람에 의해 신고당한 사람들의 리스트를 가지고 있는 디렉토리(directory)가 필요하다고 생각했고,

신고를 당한 사람들에 대해서 그 사람을 신고한 사람들의 리스트를 가지고 있는 디렉토리(banned) 있어야 한다고 생각했다(신고 중복하지 않기 위해서와 총 신고 수를 계산해서 정지를 할지 말지 결정하기 위해서)

 

final은 banned에서 각 사람이 가지고 있는 리스트의 원소 갯수가 k개 이상인 사람들의 이름을 담아놓는 리스트이다. 

이 final 리스트와 directory의 각 key들의 리스트를 비교해서 해당 사람이 신고한 사람들 중 몇명이 정지를 받았는지 반환하는 로직을 생각했다 

 

주의 해야할 점은 신고를 한 사람 중에 정지 당한 사람 수를 셀 때 반복문 진행은 directory의 key로 진행하기 때문에 

answer의 인덱스와는 맞지 않는 다는 것이었다. 

그래서 따로 k 변수를 설정해준 후  answer의 인덱스에 맞춰서 값을 넣었다 

 

 k = 0        
    for i in directory.keys():
        count = 0        
        for j in final:
            if j in directory[i]:
                count += 1      
        answer[k] = count
        k += 1

 

 

- 정답 풀이: 

def solution(id_list, report, k):  
    directory = {}
    banned = {}
    n = len(id_list)
    m = len(report)
    answer = [0]*n
    final = []
    
    for i in range(n):
        directory[id_list[i]] = []
        banned[id_list[i]] = []
        
    for i in range(m):
        a,b = report[i].split()   
        #a가 신고한 b
        if b not in directory[a]: 
            directory[a].append(b)
        #b를 신고한 a, 정지당하는 사람 세려고            
        if a not in banned[b]:
            banned[b].append(a)
                    
    for name in banned.keys():
        if len(banned[name]) >= k :
            final.append(name)
    k = 0        
    for i in directory.keys():
        count = 0        
        for j in final:
            if j in directory[i]:
                count += 1      
        answer[k] = count
        k += 1 
    return answer

+ Recent posts