728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/92334
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr



풀이
- 같은 사람이 한 사람을 여러번 신고하면 중복은 허용되지 않는다. 그래서 set함수를 이용해 (신고한사람 신고받은사람)의 중복 값을 제거했다.
- 각 이용자의 신고 받은 횟수를 카운트해야 한다고 생각했다. 그래서 cnt함수를 만들어 신고를 받을 때마다 카운트했다.
- reporter_list를 만들어 각 사람의 신고한 사람을 저장했다.
- k번 이상 신고당해 정지 당한 사람을 expulsion에 저장했다.
- 마지막으로 2중 for문을 이용해 각 이용자가 신고한 사람이 정지 당했으면, answer의 신고자의 인덱스 값에 값을 증가시킨다.
생각 나는대로 풀다보니 배열을 많이 만들었고 코드(1번 코드)가 복잡해진거같다... 그래서 다른 사람의 코드를 보고 더 깔끔한 코드(2번 코드)를 다시 작성했다.
- 1번 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
def solution(id_list, report, k):
answer = [0] * len(id_list)
report = set(report)
cnt = [0] * len(id_list)
reporter_list = [[] for i in range(len(id_list))]
expulsion = []
for i in report:
x, y = i.split()
cnt[id_list.index(y)] += 1
reporter_list[id_list.index(x)].append(y)
for i in range(len(cnt)):
if cnt[i] >= k:
expulsion.append(id_list[i])
for i in range(len(reporter_list)):
for j in expulsion:
if j in reporter_list[i]:
answer[i] += 1
return answer
|
cs |
아래 코드는 다른사람의 코드를 보고 다시 짠 코드이다.
위와 동일하게 우선 중복 값을 없애기 위해 set을 이용했다.
그리고 reporter 딕셔너리를 만들어 각 이용자이름으로 초기화 시켰다. 다음 딕셔너리에는 이용자별로 신고당한 횟수를 저장할 것이다.
for문을 이용해서 i.split()[1]로 신고받은사람을 뽑았고 그에 해당하는 이용자의 값을 증가시켰다.
그리고 다음 for문에서 reporter의 값이 k이상이면 해당 인덱스에 맞는answer의 값을 증가시켰다.
훨씬보기편하고 좋은 코드인거같다..
- 2번 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def solution(id_list, report, k):
answer = [0] * len(id_list)
report = set(report)
reporter = {x: 0 for x in id_list}
for i in report:
reporter[i.split()[1]] += 1
for i in report:
if reporter[i.split()[1]] >= k:
answer[id_list.index(i.split()[0])] += 1
return answer
|
cs |
728x90
반응형
'Python3 > 프로그래머스' 카테고리의 다른 글
2022.03.01 [프로그래머스] (python 파이썬) 파괴되지 않은 건물 (0) | 2022.03.01 |
---|---|
2022.02.28 [프로그래머스] (python 파이썬) 프린터 (0) | 2022.02.28 |
2022.02.28 [프로그래머스] (python 파이썬) 양궁대회 (0) | 2022.02.28 |
2022.02.27 [프로그래머스] (python 파이썬) 주차 요금 계산 (0) | 2022.02.27 |
2022.02.27 [프로그래머스] (python 파이썬) k진수에서 소수 개수 구하기 (0) | 2022.02.27 |
댓글