신고 결과 받기
답:
def solution(id_list, report, k):
result = {}
reported_log = {}
stop = []
answer = [0] * len(id_list)
# 중복값 삭제 및 정렬
report = sorted(list(set(report)))
# result 신고횟수 셀 dict생성
for i in id_list:
result[i] = 0
# reported_log 신고한 유저 key, 신고당한 user는 value list로 추가
for r in report:
user_id, reported_id = r.split(" ")
# print(user_id, reported_id)
if not user_id in reported_log:
reported_log[user_id] = []
reported_log[user_id].append(reported_id)
# print(reported_log)
# 신고된 횟수 및 정지여부 확인
for r in report:
reported_id = r.split(" ")[1]
result[reported_id] += 1
# reported_id가 정지횟수를 넘으면 append ##여러번 들어갈 우려가 있음
if result[reported_id] >= k:
stop.append(reported_id)
# reported_log 신고한 유저 key, 신고당한 user는 value list,
# list에 있는 stop을 확인하고 key값으로 answer에 추가
stop = set(stop)
for key in reported_log:
for s in stop:
if s in reported_log[key]:
index = id_list.index(key)
answer[index] += 1
return answer
문제 분석 및 해석
문제가 길어서 제한 조건에 따라 문제를 잘라서 풀이해야겠다고 생각했다.
제한조건 1
각 유저는 한 번에 한 명의 유저를 신고 report = []
- 신고 횟수에 제한 없음. 서로 다른 유저를 계속해서 신고
- 한 유저의 동일한 유저에 대한 신고 횟수는 1회로 처리
제한 조건2
k번 이상 신고된 유저는 게시판 이용이 정지,
해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송
입력값 id_list, report, k | 결과값 result
id_list | report | k | result |
["muzi", "frodo", "apeach", "neo"] | ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"] | 2 | [2,1,1,0] |
["con", "ryan"] | ["ryan con", "ryan con", "ryan con", "ryan con"] | 3 | [0,0] |
----- 제한 조건 1 -----
d_list로 dictionary {이름: 0} 생성
report (신고한 id)를 먼저 set으로 만들었다가 다시 list화 (중복제거)
user_id를 for문으로 반복하면서 report에서 공백 " " 뒤에 있는 이름을 잘라서
dictionary에 report횟수를 +1
이후 report횟수가 k이상인 유저를 확인해 stop list로 append
----- 제한 조건 2 -----
k번 이상 신고된 유저는 게시판 이용이 정지,
정지된 유저를 신고한 유저에게 결과메일 보내주어야함
split(" ")[0]
유저가 어떤 유저를 신고했는지 key : [] 값으로 만들어둘까?
stop이름이 신고값에 들어가있으면
id_list.index를 찾아서 answer에 +1
+ answer에 메일 횟수를 더할 수 있도록 [0] * len(id_list)를 생성
결과 메일을 받을 횟수를 list에 담아 return
문제를 풀며 생겼던 오류
answer index에 더하는 형식을 취하려 했지만 오류가 났다
빈 answer list를 주고 + 해주었기 때문.
따라서 answer를 선언할 때 아래와 같이 수정
answer = [0] * len(id_list)
리뷰.
문제를 풀이하며 새롭게 알게 된 것.
1. 신고당한 id를 확인하기 위해 사용한 split(" ")[1]
2. spilt(" ")을 다중할당으로 받기
3. dictionary : dic[key]에 append()하면 value값에 있는 list에 append할 수 있다!
어렵지만 보람찬 문제 풀이였다:)
'알고리즘 풀이' 카테고리의 다른 글
[알고리즘] Python 원시문자열 (0) | 2023.08.30 |
---|---|
[알고리즘] 프로그래머스 | 올바른 괄호 (1) | 2023.08.28 |
[알고리즘] 프로그래머스 | JadenCase 문자열 만들기 (0) | 2023.08.25 |
[알고리즘] 프로그래머스 | 숫자의 표현 (0) | 2023.08.24 |
[알고리즘] 프로그래머스 | 체육복 lv.1 (0) | 2023.08.23 |