본문 바로가기
Python3/프로그래머스

2022.02.27 [프로그래머스] (python 파이썬) 신고 결과 받기

by ian's coding 2022. 2. 27.
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
반응형

댓글