링크 : https://school.programmers.co.kr/learn/courses/30/lessons/92334
코드
def solution(id_list, report, k):
answer = []
report_list = {}
report_cnt = {}
for i in id_list:
report_list[i] = set([])
report_cnt[i] = set([])
for i in report:
who, ban = i.split()
report_list[who].add(ban)
report_cnt[ban].add(who)
for who, banned in report_list.items():
cnt = 0
for ban in banned:
if len(report_cnt[ban]) >= k:
cnt+=1
answer.append(cnt)
return answer
아이디어
내가 누구를 신고한 리스트와 내가 누구에게 신고 당했는지 리스트를 만들어서,
내가 신고한 사람중, 신고 당한 횟수가 k명 이상인 사람이 있으면 그 수를 세서 답변. 살짝 무식하게 푼..? 굳이 리스트를 2개 사용할 필요도 없었지 않았나... 하다가 다른 사람의 풀이에서 좋다 생각한 코드
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
제한조건 중
- 한 유저를 여러 번 신고할 수도 있지만, 동일한 유저에 대한 신고 횟수는 1회로 처리됩니다.
를 set으로 중복을 제거하는게 더 간편한 것 같고, 신고당한 횟수를 싹 모은 후, k번 이상 신고 당한 사람이면 신고자를 += 1
오류
오류보다는, 클린코드 책을 오늘 처음 읽기 시작했는데 이 예시랑 맞을지는 모르겠지만 코드나 변수명에 대한 고민 등을 많이 해야겠다... 문제 풀 때 조금 더 체계적으로 고민하고 해야겠다.
'알고리즘' 카테고리의 다른 글
프로그래머스 - 길 찾기 게임 (0) | 2022.12.15 |
---|---|
백준(1644) - 소수의 연속합 (0) | 2022.12.12 |
프로그래머스 부대복귀 (0) | 2022.12.06 |
[Python] 백준 10989 - 수 정렬하기 3 (0) | 2022.10.10 |
[Python] 백준 1920번 수 찾기 (0) | 2022.10.10 |