본문 바로가기
Algorithm/Programmers

[프로그래머스] 92334 파이썬 - 신고 결과 받기

by chobbo 2024. 4. 11.

 

각 유저가 받은 결과 메일의 수를 출력하면 되는 문제.

신고한 모든 내용을 취합, 마지막에 한꺼번에 게시판 이용 정지를 시킨다는 조건 때문에 구현이 어렵진 않았다.

시간복잡도는 report의 길이가 최대 200,000 이기 때문에 이중 포문을 사용하지만 않으면 통과였다.

 

풀이

1. id_list에 있는 id를 key값으로 가지는 dictionary에 [id가 신고당한수, 신고한 id들]을 value로 넣는다.

2. report를 돌며 신고한 id,신고당한 id를 변수 a,b에 저장한다.

    2-1. 만약 dic[a]가 신고한 id들(dic[a][1])에 b가 존재하지 않는다면,

           dic[a][1]에 b를 append하고 dic[b]가 신고당한 수에(dic[b][0])에 1을 더한다.

3. dic에서 신고 횟수가 k이상인 정지된 아이디들을 뽑아 lst에 저장한다.

4. dic에서 lst의 원소들을 가지고 있으면 cnt+=1, 그 수를 그대로 answer에 append 해준다.

 

코드

def solution(id_list, report, k):
    answer = []
    
    # [id가 신고당한수, 신고한 id들]을 value에 넣을 거임
    dic = {}
    for id in id_list:
        dic[id] = [0,[]]
    
    for i in report:
        # a는 신고한 id, b는 신고당한 id
        a,b = i.split()
        if b not in dic[a][1]:
            dic[a][1].append(b)
            dic[b][0] += 1
    
    # dic에서 정지된 아이디 뽑기
    lst = []
    for i in dic.items():
        if i[1][0] >= k:
            lst.append(i[0])
    
    for i in dic.values():
        cnt = 0
        for j in lst:
            if j in i[1]:
                cnt+=1
        answer.append(cnt)
    return answer

 

 

 

프로그래머스

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

programmers.co.kr