Sad Puppy 3 [프로그래머스 lv1]신고 결과 받기 :: 개발자 아지트

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

 

프로그래머스

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

programmers.co.kr

 

문제설명

신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다.

 

각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.

  • 신고 횟수에 제한은 없습니다. 서로 다른 유저를 계속해서 신고할 수 있습니다.
  • 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.

k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.

  • 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.

 

문제 해결 방법

해시를 통해 문제를 해결함

 

코드 구현

def solution(id_list, report, k):
    answer = []
    
    singoList = { }
    amISingo = { }
    
    for i in id_list:
        if i in singoList:
            continue
        else:
            singoList[i] = []
            amISingo[i] = 0
    
    for i in report:
        tmpList = i.split(" ")
        if tmpList[0] in singoList:
            key = tmpList[0]
            
            values = singoList.get(key)
            if tmpList[1] in values:
                continue
            else:
                singoList[key].append(tmpList[1])
                
    for i in singoList:
        tmpList = singoList[i]
        if len(tmpList) > 0:
            for j in tmpList:
                if j in amISingo:
                    amISingo[j]+=1
                else:
                    continue

    realSingoMan = []
    
    for i in amISingo:
        if amISingo[i] >=k:
            realSingoMan.append(i)

    for i in singoList:
        tmpValue = singoList[i]

        cnt = 0
        for j in tmpValue:
            if j in realSingoMan:
                cnt+=1

        answer.append(cnt)
        cnt=0

    return answer

 

시간/공간 복잡도

O(N^2)

최적화 및 개선

따로 하지 않음

어려웠던 점

없음

+ Recent posts