2022 카카오 블라인드 리쿠르트
문제 풀러 바로가기 👇👇👇👇👇👇
https://programmers.co.kr/learn/courses/30/lessons/92334
문제풀이
def solution(id_list, report, k):
answer = [0] * len(id_list)
# 중복 제거
result = set(report)
result = list(result)
# 신고된 사람 : [신고한 사람]
dict = {}
for id in id_list:
dict[id] = []
# 신고한 유저와 유저가 신고한 아이디 나누기
for i in result:
show = i.split(" ")
dict[show[1]] += [show[0]]
# k명 이상 신고된 사람 찾기
for key, value in dict.items():
if len(value) >= k:
for person in value:
answer[id_list.index(person)] += 1
return answer
딕셔너리를 이용해 문제를 풀었다.
1. 일단 중복된 신고는 받지 않는다고 했기 때문에 set()함수를 통해 중복을 제거해준다.
2. 신고된 사람 : [신고한 사람] 구도를 만들어준다.
3. report에 저장된 값은 "신고한사람 신고된사람" 형식이다. split() 함수를 통해서 report값을 절반으로 나눠준 다음, 딕셔너리 값에 추가했다. (show[0] 를 꼭 리스트처리 해줘야한다. ==> [show[0]] or list(show[0]))
4. 이제 딕셔너리를 반복문으로 순회하면서 k명 이상 신고된 사람을 찾는다. 해당 사람을 신고한 사람들의 인덱스 값에 맞춰서 answer값을 1씩 더해주면 정답이 나온다.