sm 기술 블로그
신고 결과 받기(2022 KAKAO BLIND RECRUITMENT) - 파이썬 본문
def solution(id_list, report, k):
answer = list(0 for _ in range(len(id_list)))
declaration = dict()
report = list(set(report))
for i in report:
victim, perpetrator = i.split(" ")
try:
declaration[perpetrator] += [i]
except:
declaration[perpetrator] = [i]
for j in declaration:
if len(declaration[j]) >= k:
for z in declaration[j]:
victim, perpetrator = z.split(" ")
answer[id_list.index(victim)] += 1
return answer
문제요약
유저에게 신고 두 번 이상 받으면 계정이 정지된다.
계정이 정지되면 신고한 유저에게 알림 메일을 보낸다.
설명
딕셔너리를 생각해냈다면 짧고, 어렵지 않게 풀었을 거다.
(생각을 좀 많이 한게 흠이긴 하다.)
answer = list(0 for _ in range(len(id_list)))
declaration = dict()
report = list(set(report))
answer 는 유저의 수만큼 0으로 초기화 한다. -> 알림메일을 보낸 횟수로 사용할 것이다.
declaration 는 딕셔너리로 초기화 한다.
report = list(set(report)) 여러번의 신고는 한번으로 친다.
집합은 중복을 허용하지 않는다.
따라서 리스트를 집합으로 바꾸어 중복을 제거하고 다시 리스트로 바꿔 주었다.
for i in report:
victim, perpetrator = i.split(" ")
try:
declaration[perpetrator] += [i]
except:
declaration[perpetrator] = [i]
신고를 당한 사람에 리포트 내용을 집어 넣는다.
예외처리를 사용한 이유는 딕셔너리에 값이 없으면 +=는 에러를 내뱉는다.
따라서 에러가 난 경우 (값이 없을 경우) = 를 이용해 값을 넣어 준다.
for j in declaration:
if len(declaration[j]) >= k:
for z in declaration[j]:
victim, perpetrator = z.split(" ")
answer[id_list.index(victim)] += 1
딕셔너리의 갯수가 k 이상이라면 신고한 회원들(victim) 에게 알림 메일을 보낸다.
'문제 > 프로그래머스_파이썬' 카테고리의 다른 글
튜플 (2019 카카오 개발자 겨울 인턴십) - 파이썬 (0) | 2022.10.10 |
---|---|
[1차] 캐시 (2018 KAKAO BLIND RECRUITMENT) - 파이썬 (0) | 2022.10.09 |
성격 유형 검사하기(2022 KAKAO TECH INTERNSHIP) - 파이썬 (1) | 2022.10.07 |
신규 아이디 추천(2021 KAKAO BLIND RECRUITMENT) - 파이썬 (0) | 2022.10.06 |
키패드 누르기(2020 카카오 인턴십) - 파이썬 (0) | 2022.10.05 |
Comments