- 문제 : 링크
Level1 문제이고, 스스로 푼 문제다!
문제 처음에 읽었을 때는 좀 복잡하다 생각했는데, 천천히 풀다보니 정답이 떴다. 걸린 시간은 30분 정도
신고를 한 사람에 대해서 해당 사람에 의해 신고당한 사람들의 리스트를 가지고 있는 디렉토리(directory)가 필요하다고 생각했고,
신고를 당한 사람들에 대해서 그 사람을 신고한 사람들의 리스트를 가지고 있는 디렉토리(banned) 있어야 한다고 생각했다(신고 중복하지 않기 위해서와 총 신고 수를 계산해서 정지를 할지 말지 결정하기 위해서)
final은 banned에서 각 사람이 가지고 있는 리스트의 원소 갯수가 k개 이상인 사람들의 이름을 담아놓는 리스트이다.
이 final 리스트와 directory의 각 key들의 리스트를 비교해서 해당 사람이 신고한 사람들 중 몇명이 정지를 받았는지 반환하는 로직을 생각했다
주의 해야할 점은 신고를 한 사람 중에 정지 당한 사람 수를 셀 때 반복문 진행은 directory의 key로 진행하기 때문에
answer의 인덱스와는 맞지 않는 다는 것이었다.
그래서 따로 k 변수를 설정해준 후 answer의 인덱스에 맞춰서 값을 넣었다
k = 0
for i in directory.keys():
count = 0
for j in final:
if j in directory[i]:
count += 1
answer[k] = count
k += 1
- 정답 풀이:
def solution(id_list, report, k):
directory = {}
banned = {}
n = len(id_list)
m = len(report)
answer = [0]*n
final = []
for i in range(n):
directory[id_list[i]] = []
banned[id_list[i]] = []
for i in range(m):
a,b = report[i].split()
#a가 신고한 b
if b not in directory[a]:
directory[a].append(b)
#b를 신고한 a, 정지당하는 사람 세려고
if a not in banned[b]:
banned[b].append(a)
for name in banned.keys():
if len(banned[name]) >= k :
final.append(name)
k = 0
for i in directory.keys():
count = 0
for j in final:
if j in directory[i]:
count += 1
answer[k] = count
k += 1
return answer
'프로그래머스 > Level1' 카테고리의 다른 글
[2019 카카오 개발자 겨울 인턴십] 64061번 : 크레인 인형뽑기 (0) | 2022.08.19 |
---|---|
[2022 KAKAO TECH INTERNSHIP/ 프로그래머스] 18666번 : 성격 유형 검사하기 (0) | 2022.08.19 |
[2021 카카오 채용연계 인턴십] 81301번 : 숫자 문자열과 영단어 (0) | 2022.08.17 |
[완전탐색/ 프로그래머스] 86491번 : 최소 직사각형 (0) | 2022.08.17 |
[그리디/프로그래머스] 2021 Dev-Matching 웹 백엔드 개발 (0) | 2022.08.16 |