신고 결과 받기
풀이
2022 KAKAO BLIND RECRUITMENT 문제로 일반적인 lv1 문제보단 복잡하긴 하다.
내가 풀이를 하면서 중점으로 본 것은 문제를 해결하면서 변수가 꼬이지 않게 하는 것이었다.
id_number 대신 index를 사용해서 확인해도 되었으나, 개인적으로 이게 덜 헷갈릴 거라 생각했기에 이렇게 작성을 하고 이용했다.
순서대로
1. 한 유저가 다른 한 유저를 여러 번 신고해도 1번의 신고로 인정되기에 중복 제거
2. 유저별 id번호 기입
3. 각 유저의 신고받은 횟수 기입
4. 신고받은 횟수가 K번 이상일 경우, 그 유저를 신고한 유저에게 메일 보내기
5. 총 메일 받은 횟수를 answer에 기입
위의 5가지 과정으로 위 문제를 풀었고, 아래처럼 풀이했다.
# 신고 k번 이상이면 신고당한 유저 정지
# 한사람이 한 유저에게 신고가 여러번이면 그 신고는 1회
# 내 신고로 유저가 정지되면, 나에게 해당 유저 정지되었음을 메일로 전송.
def solution(id_list, report, k):
answer = []
# 한 유저 대상으로 한 사람이 여러번 신고해도 1번으로 치니 중복 제거
report = list(set(report))
# 각 유저별 id번호 기입해놓기
id_number = {}
id_mail = {}
Reported_user = {}
for id in range(len(id_list)):
id_number[id_list[id]] = 0
id_mail[id_list[id]] = 0
Reported_user[id_list[id]] = 0
# 신고당한 유저는 몇번 신고당했나
for i in range(len(report)):
report_person = list(map(str, report[i].split()))
Reported_user[report_person[1]] += 1
# k번 이상 신고당한 유저 찾기
for j in range(len(report)):
report_person = list(map(str, report[j].split()))
# k번 이상 신고당했으면 정지니까, 신고한 사람에게 메일 보내기
if Reported_user[report_person[1]] >= k:
id_mail[report_person[0]] += 1
for id in id_list:
answer.append(id_mail[id])
return answer
다른 사람 풀이
다른 사람은 아래처럼 풀었다.
def solution(id_list, report, k):
answer = [0] * len(id_list)
reports = {x : 0 for x in id_list}
for r in set(report):
reports[r.split()[1]] += 1
for r in set(report):
if reports[r.split()[1]] >= k:
answer[id_list.index(r.split()[0])] += 1
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv1 소수찾기(python) (1) | 2024.01.29 |
---|---|
프로그래머스 Lv1 K번째수(python) (0) | 2024.01.29 |
프로그래머스 Lv1 개인정보 수집 유효기간(python) (1) | 2024.01.29 |
프로그래머스 Lv1 문자열 내림차순으로 배치하기(python) (0) | 2024.01.29 |
프로그래머스 Lv1 같은 숫자는 싫어(python) (0) | 2024.01.29 |