프로그래머스 - 신고 결과 받기 / 문제 유형 : 구현, 해시맵 / 2022 KAKAO BLIND RECRUITMENT / Level 1
2022 KAKAO BLIND RECRUITMENT에서 나온 신고 결과 받기 문제이다.
문제 바로가기 - https://school.programmers.co.kr/learn/courses/30/lessons/92334
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제
Solution
문제를 해결하기 위해 주어진 report를 dictionary로 변경 하였다.
dictionary는 총 2개로
- id 별 신고한 사람
- 사람별 신고 받은 횟수
이다.
첫번째 id별 신고한 사람의 뜻은 '[userid] : userid를 신고한 사람의 목록'으로 구성되었다는 의미이다.
예를 들자면 ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"]가 있을 때,
유저id | 유저id를 신고한 유저 |
"muzi" | ["apeach"] |
"frodo" | ["muzi","apeach"] |
"apeach" | [] |
"neo" | ["frodo","muzi"] |
위와같이 구성한다는 것이다.
이 dictionary를 만든 이유는 중복 신고 여부를 판단하기 위해서 이다.
신고한 유저는 나중에 편하게 사용하기 위해 id 인덱스로 저장하였다.
풀이 과정은 report를 dictionary로 변경하는데
이때, 중복 신고를 위해 지금 신고받은 유저의 해당 유저를 신고한 유저 목록에 신고한 사람이 존재한다면 횟수를 추가하지 않고,
존재하지 않는다면 유저와 횟수를 추가한다.
이후 횟수를 저장한 dictionary를 순회하면서 신고 받은 횟수가 k이상이면, 이 유저를 신고한 유저들의 값을 +1 하였다.
from collections import defaultdict
def solution(id_list, report, k):
answer = [0]*len(id_list)
sheet = defaultdict(list) #id별(신고 받은 사람) 신고한 사람 저장 -> {"Prodo":[0,1]}
check = defaultdict(int) #사람별 신고 횟수 저장
for r in report:
user, puser = map(str, r.split()) #신고한 사람, 신고 받은 사람
num = id_list.index(user) #유저 번호로 미리 변경
alist = list(sheet[puser]) #지금까지 사람 별 신고받은 user 목록
if num not in alist: #중복 신고인지 확인
sheet[puser].append(num)
check[puser] += 1
for c in check.keys():
if check[c] >= k:
user_list = list(sheet[c])
for u in user_list:
answer[u] += 1
return answer
나는 위와 같이 풀었지만, 다른사람의 풀이를 보니 중복 체크를 위해 set을 사용한 사람도 있었다.
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
set을 이용하는 방법이 더 코드가 간결할 것 같다. 위는 완전 간단하게 풀어서 대단하다 싶었다.😳
'코딩테스트 문제' 카테고리의 다른 글
[코드트리] 삼성 SW 역량테스트 2022 상반기 오전 2번 문제 - 예술성 (0) | 2023.04.06 |
---|---|
[Python] 프로그래머스 - 튜플(2019 카카오 개발자 겨울 인턴십) (0) | 2022.10.05 |
[Python] 프로그래머스 - 주차요금 계산 (0) | 2022.10.03 |
[Python] 프로그래머스 - 성격 유형 검사하기(2022 KAKAO TECH INTERNSHIP) (0) | 2022.09.17 |
[Python] 프로그래머스-소수만들기(Summer/Winter Coding(~2018)) (2) | 2022.09.15 |