티스토리 뷰

반응형

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

 

코딩테스트 연습 - 신고 결과 받기

문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의

programmers.co.kr


⊙ 문제

⊙ 제한사항

⊙ 입출력 예

⊙ 입출력 예 설명


 

⊙ 문제 접근 과정

 

(개인적으로 레벨이 1이지만 레벨 1.5인 문제라고 생각합니다.)

 

신고를 K번 이상 받으면 정지 처리가 되고, 신고한 인원이 정지되었다면 메일을 받습니다.

메일을 몇개 받았는지 list를 출력해주는 문제였어요.

 

문제 접근 과정은 다음과 같습니다.

 

1️⃣ 같은 유저에 대해 중복 신고 제거

2️⃣ 유저별 신고 유저 분류

3️⃣ 신고 받은 유저 list 생성

4️⃣ 그 중 K번 이상 신고받은 list 생성

5️⃣ 신고를 성공한 유저에게 정지가 되었다는 메일 전송

 


 

1️⃣ 같은 유저에 대해 중복 신고 제거

#한 번에 한 명의 유저 신고
    report = set(report)

주어진 값에 대해 set을 해주었다.

set을 하면 같은 유저에 대해 여러번 신고한 것을 제거할 수 있어요.

 

2️⃣ 유저별 신고 유저 분류

    # 신고 임시 저장 (유저ID: 유저가 신고한 ID)
    arrayReport = {}
    for i in report:
        name = i.split()
        if name[0] in arrayReport:
            arrayReport[name[0]]+=[name[1]]
        else:
            arrayReport[name[0]]=[name[1]]

어떤 유저가 어떤 유저를 신고했는지 key, value로 표현했어요.

 

test 1 ex)
{
'frodo': ['neo'],
'muzi': ['frodo', 'neo'],
'apeach': ['frodo', 'muzi']
}

 

 

3️⃣ 신고 받은 유저 list 생성

# 신고 받은 인원들 => tempReport
    tempReport = []
    for i in arrayReport.values():
        tempReport +=i

신고받은 유저만 모은 list를 만들어주었어요.

 

 

 

4️⃣ 그 중 K번 이상 신고받은 list 생성

# K만큼 신고 확인
    reportK = []
    for i in id_list:
        if i in tempReport:
            if tempReport.count(i) >= k:
                reportK += [i]

그리고 주어진 id_list를 돌면서 해당 id가 신고를 K번 이상 받았는지 판별해요.

이때 K번 이상 받았는지는 count() 함수를 사용했어요

 

 

5️⃣ 신고를 성공한 유저에게 정지가 되었다는 메일 전송

 # 메일 전송
    answer = []
    for i in id_list:
        if i in arrayReport.keys():
            count = 0
            for j in arrayReport[i]:
                if j in reportK:
                    count +=1
            answer += [count]
        else:
            answer += [0]

신고가 정상적으로 되었는지 id_list 순서에 따라 count를 해주었어요.

 

해당 유저가 신고한 내역에 존재한다면, count를 0으로 세팅해준 후,

신고 내역 중 K번 이상 신고를 당해 정지된 유저가 존재하면 count up을 진행해주었어요.

 

만약 해당 유저가 신고한 내역이 없으면 0을 바로 추가해주었습니다.

 

 

마지막으로

return answer

 

 

 

 


 

⊙ 문제 풀이

 

def solution(id_list, report, k):
    #한 번에 한 명의 유저 신고
    report = set(report)
    
    # 신고 임시 저장 (유저ID: 유저가 신고한 ID)
    arrayReport = {}
    for i in report:
        name = i.split()
        if name[0] in arrayReport:
            arrayReport[name[0]]+=[name[1]]
        else:
            arrayReport[name[0]]=[name[1]]
    
    # 신고 받은 인원들 => tempReport
    tempReport = []
    for i in arrayReport.values():
        tempReport +=i
    
    # K만큼 신고 확인
    reportK = []
    for i in id_list:
        if i in tempReport:
            if tempReport.count(i) >= k:
                reportK += [i]
    
    # 메일 전송
    answer = []
    for i in id_list:
        if i in arrayReport.keys():
            count = 0
            for j in arrayReport[i]:
                if j in reportK:
                    count +=1
            answer += [count]
        else:
            answer += [0]
        
    return answer

⊙ 마무리

 

 

재미있다 ㅎㅎ

 

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함