https://programmers.co.kr/learn/courses/30/lessons/92334
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
def soultion(id_list , report, k):
answer=[]
return answer
주어지는 입력값으로 리스트 id_list , report와 정수 k 값이 주어진다.
예시를 살펴보면
결과값은 모든 유저의 신고처리된 메일의 갯수가 0을 포함해서 리스트로 나온다. answer리스트의 길이가 유저의 수와 같다.
def soultion(id_list , report, k):
answer = [0]*len(id_list)
return answer
두 번째 예시를 보면 유저1이 유저 2를 몇 번을 신고해도 유저 2의 신고처리는 1회에 그친다.
따라서 report의 중복을 없애자
def soultion(id_list , report, k):
answer = [0]*len(id_list)
report = set(report)
return answer
그렇다면 예시 2로 보는 report는
["ryan con", "ryan con", "ryan con", "ryan con"]
에서
["ryan con"]
와 같이 중복이 제거된다.
또 report의 갯수는 최소
예시 1을 보면 report의 값 중 공백을 제거해서 리스트에 저장한 것 중 인덱스 0은 신고한 user1, 인덱스 1은 신고당한 user2이다.
for i in report :
user1=i.split()[0]
user2=i.split()[1]
["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"]
def soultion(id_list , report, k):
answer = [0]*len(id_list)
report = set(report)
reports = {x:0 for x in id_list}
for i in report :
reports[i.split()[1]] += 1
return answer
reports은 모든 유저가 기본값 0으로 (신고당한 횟수인) 값을 가지는 딕셔너리를 만든 것이다.
위의 예시 리스트를 참고하면
첫 번째에서 frodo의 값은 기본값이던 0에서 1로 변했고
두 번째에서 frodo의 값은 이전 값이던 1에서 1 증가한 2로
세 번째에서 neo의 값은 기본값이던 0에서 1로 변했고
네 번째에서 neo의 값은 이전 값 1에서 1증가한 2
마지막에서 muzi의 값은 0에서 1로
바뀌어 reports 딕셔너리에 저장된다.
여기서 세번째 인자 k 보다 크거나 같아야 신고처리가 되므로 if 조건문을 사용한다.
for i in report :
if reports[i.split()[1]] >= k :
answer[id_list.index(i.split()[0])] += 1
신고한 유저1의 이름을 가지는 리스트의 인덱스가 answer의 인덱스안에서 1씩 증가한다.
'코딩테스트' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2022.07.14 |
---|---|
[코딩테스트][프로그래머스] 신규아이디 추천 -정규식 표현의 중요성 (0) | 2022.06.16 |
[코딩테스트][프로그래머스] 로또의 최고 순위와 최저 순위 (0) | 2022.06.10 |