코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.

코딩테스트 정보

  • 프로그래머스
  • python
  • level 1
  • 점수 : 캡쳐 못함
  • 문제 링크


풀이 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def solution(id_list, report, k):
    answer = []
    
    # 리포트된 횟수와 응답받을 수 변수 생성
    for id_ in id_list:
      globals()[id_ + '_reported'] = 0
      globals()[id_ + '_answer'] = 0
    
    # 리포트 내용 중복 제거, 리포트된 사용자 리스트 생성
    report_dup_remove = [ x.split(' ') for x in list(set(report)) ]
    reported_id_list = [ x[1] for x in report_dup_remove ]
    
    # 사용자별로 리포트 된 횟수 변수에 저장
    for id_ in reported_id_list:
      globals()[id_ + '_reported'] += 1
    
    # 사용자별 리포트 된 횟수가 k 이상이면 응답받을 사용자에게 +1
    for report in report_dup_remove:
      if globals()[report[1] + '_reported'] >= k:
        globals()[report[0]+'_answer'] += 1
    
    # 응답받을 수를 answer 리스트에 담기
    for id_ in id_list:
      answer.append(globals()[id_ + '_answer'])
    
    return answer




풀이 방식

■■■■ 문제 요약 ■■■■

불량 이용자를 신고한 사람에게, 본인이 신고한 사람이 이용 정지를 당하면 연락을 받게 한다.
answer : 신고자가 연락을 받는 횟수를 답변해야 한다.

■■■■ 접근 방식 ■■■■

(1) 사용자별 신고받은 횟수를 계산한다.
(2) 신고받은 횟수가 이용 정지 수준 이상인지 판단한다.
(3) 이용 정지 수준 이상이라면, 신고자에게 연락하는 횟수를 +1씩 한다.


리뷰

유동 변수 globals() 사용과 원리 파악

globals() 메서드를 통해 유동적 변수 생성이 가능하다.
아래는 예시이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
id_list = ['muzi', 'neo', 'frodo']

for i, id_ in enumerate(id_list):
  globals()[id_ + '_num'] = i + 1

print('muzi : ', muzi_num)
# 출력 결과 => muzi : 1
print('neo : ', neo_num)
# 출력 결과 => neo : 2
print('frodo : ', frodo_num)
# 출력 결과 => frodo : 3

globals()는 전역 변수를 담고 있는 dictionary 형태의 자료이다.
이를 출력하면 아래와 같다.

1
2
3
4
5
6
7
8
9
id_list = ['muzi', 'neo', 'frodo']

for i, id_ in enumerate(id_list):
  globals()[id_ + '_num'] = i + 1

print(globals())
###### 출력 결과 ######
# {..., 'muzi_num': 1, 'neo_num': 2, 'frodo_num': 3, ...}