반응형
문제는 이미 여러분이 충분히 보고 오셨을 거라고 생각합니다.
문제 설명에서 문제 풀이에 중요한 조건만 먼저 설명한 뒤에 코드를 풀이하겠습니다.
- 각 유저는 한 번에 한 명의 유저를 신고할 수 있습니다.
: 신고 횟수에 제한은 없습니다.
: 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
- k번 이상 신고된 유저는 게시판 이용이 정지되며, 해당 유저를 신고한 모든 유저에게 정지 사실을 메일로 발송합니다.
: 유저가 신고한 모든 내용을 취합하여 마지막에 한꺼번에 게시판 이용 정지를 시키면서 정지 메일을 발송합니다.
- report의 원소는 "이용자id 신고한id" 형태의 문자열입니다. 예를 들어 "muzi frodo"의 경우 "muzi"가 "frodo"를 신고했다는 의미입니다.
-id는 알파벳 소문자로만 이루어져 있고 id 사이에 공백은 한 칸만 있습니다.
-자기 자신을 신고하는 경우는 없습니다.
def solution(id_list, report, k):
report = list(set(report)) # 리스트의 순서는 중요하지 않으니 set으로 중복을 제거합니다.
answer = [0]*len(id_list) # id_list의 길이 만큼 원소가 0으로 채워진 answer 리스트를 만듭니다.
l=[]
d = {} # d는 신고 당한 횟수를 담기 위해 만들었습니다.
t={} # t는 신고한 사람을 담기 위해 만들었습니다.
for i in range(len(id_list)):
d[id_list[i]]=0
t[id_list[i]]=0
#print(d)와 print(t)의 결과로 {'muzi': 0, 'frodo': 0, 'apeach': 0, 'neo': 0}이 나옵니다.
for i in range(len(report)):
report[i] = report[i].split()
#report[i]의 원소를 split() 메소드를 활용하여
원래는 frodo neo인 것을 ['frodo', 'neo'] 형식으로 바꿔줍니다.
d[report[i][1]]+=1
#report[i][1]의 예로 ['frodo', 'neo'] 중 neo만 뽑도록 합니다.
#d[neo]+=1을 통해 네오의 신고 횟수를 증가시킵니다.
for i, j in d.items():
if j >= k:
l.append(i)
#k회 이상 신고받은 경우 리스트 l에 신고받은 이름을 추가합니다.
for i in range(len(report)):
for j in l:
if report[i][1] == j:
# 리포트에서 리스트 l에 해당하는 이름이 있는 경우
t[report[i][0]]+=1
#신고한 사람에게 처리 결과 메일이 가는 횟수를 추가해줍니다
return list(t.values())
# t의 값만 리스트로 리턴합니다.
도움이 되셨길 바랍니다.
반응형
'코딩' 카테고리의 다른 글
[파이썬] 코딩테스트 연습 - 성격 유형 검사하기 (0) | 2023.08.18 |
---|---|
[파이썬] 코딩테스트 연습 - 개인정보 수집 유효 기간 (0) | 2023.08.18 |
프로그래머스 AI 종합 분석 결과(feat. [파이썬] 바탕화면 정리 - 코딩테스트 연습) (2) | 2023.07.31 |
프로그래머스 AI 리포트 분석을 분석해보자 (0) | 2023.06.27 |
[파이썬] 코딩테스트 연습 - 옹알이 (1), 옹알이 (2) 코드 해설 (1) | 2023.06.09 |