CodingTest

Programmers - 신고 결과 받기

취업하고싶다! 2024. 3. 18. 19:22
 

프로그래머스

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

programmers.co.kr

 

문제

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

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

다음은 전체 유저 목록이 ["muzi", "frodo", "apeach", "neo"]이고, k = 2(, 2 이상 신고당하면 이용 정지) 경우의 예시입니다.

 

유저 ID 유저가 신고한 ID 설명
"muzi" "frodo" "muzi" "frodo" 신고했습니다.
"apeach" "frodo" "apeach" "frodo" 신고했습니다.
"frodo" "neo" "frodo" "neo" 신고했습니다.
"muzi" "neo" "muzi" "neo" 신고했습니다.
"apeach" "muzi" "apeach" "muzi" 신고했습니다.

 

유저별로 신고당한 횟수는 다음과 같습니다.

유저 ID 신고당한 횟수
"muzi" 1
"frodo" 2
"apeach" 0
"neo" 2

 

예시에서는 2 이상 신고당한 "frodo" "neo" 게시판 이용이 정지됩니다. 이때, 유저별로 신고한 아이디와 정지된 아이디를 정리하면 다음과 같습니다.

유저 ID 유저가 신고한 ID 정지된 ID
"muzi" ["frodo", "neo"] ["frodo", "neo"]
"frodo" ["neo"] ["neo"]
"apeach" ["muzi", "frodo"] ["frodo"]
"neo" 없음 없음

 

따라서 "muzi"는 처리 결과 메일을 2회, "frodo"와 "apeach"는 각각 처리 결과 메일을 1회 받게 됩니다.

이용자의 ID 담긴 문자열 배열 id_list, 이용자가 신고한 이용자의 ID 정보가 담긴 문자열 배열 report, 정지 기준이 되는 신고 횟수 k 매개변수로 주어질 , 유저별로 처리 결과 메일을 받은 횟수를 배열에 담아 return 하도록 solution 함수를 완성해주세요.

 

접근방식

 

먼저, 유저의 수 만큼 answer 배열을 0으로 초기화해줌

그 후, 유저가 몇 번 신고 당했는지 카운트 하기 위해 초기값이 0인 딕셔너리를 생성함

같은 유저가 다른 동일한 유저를 여러 번 신고할 경우 1번 신고한 것으로 간주하므로 set()을 이용해서 report 내의 중복된 문자열을 우선 제거해줌

배열 안의 문자열이 공백을 기준으로 왼쪽은 신고한 사람, 오른쪽은 신고당한 사람이므로 중복이 제거된 배열을 돌면서 신고당한 사람의 딕셔너리 값에 1을 더해주면서 각각의 유저가 신고를 총 몇 번 당했는지 계산해줌

그리고 다시 중복이 제거된 배열을 돌면서 신고당한 사람의 횟수가 지정한 횟수(k)보다 크면 .index()를 통해 신고한 사람(문자열의 왼쪽)의 위치를 id_list에서 찾고 찾은 위치(인덱스)를 answer에 적용해서 1을 더해줌

 

코드

def solution(id_list, report, k):
    answer = [0] * len(id_list)
    reports = {x:0 for x in id_list}

    for y in set(report):
        reports[y.split()[1]] += 1
        
    for z in set(report):
        if reports[z.split()[1]] >= k:
            answer[id_list.index(z.split()[0])] += 1
    return answer

'CodingTest' 카테고리의 다른 글

Programmers - 할인 행사  (1) 2024.03.23
Programmers - 개인 정보 수집 유효기간  (1) 2024.03.22
Programmers - 신규 아이디 추천  (0) 2024.03.18
Programmers - 숫자 짝꿍  (0) 2024.03.13
Programmers - 다음 큰 숫자  (0) 2024.01.01