코딩테스트 신고 결과 받기 (프로그래머스)
코딩테스트 연습에 공개된 문제는 (주)그렙이 저작권을 가지고 있습니다.
(지문 하단에 별도 저작권 표시 문제 제외)
코딩테스트 연습 문제의 지문, 테스트케이스, 풀이 등과 같은 정보는 비상업적, 비영리적 용도로 게시할 수 있습니다.
코딩테스트 정보
- 프로그래머스
- 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, ...}
댓글 남기기