문제: 신고 결과 받기
코딩테스트 연습 - 신고 결과 받기
문제 설명 신입사원 무지는 게시판 불량 이용자를 신고하고 처리 결과를 메일로 발송하는 시스템을 개발하려 합니다. 무지가 개발하려는 시스템은 다음과 같습니다. 각 유저는 한 번에 한 명의
programmers.co.kr
- 내 풀이
def solution(id_list, report, k):
n=int(len(id_list))
count=[0]*n #각 id당 신고당한 횟수
answer=[0]*n #각 id당 받을 메일 횟수
p_result='' #정지당한 id 담을 변수
#신고당한 id저장할 변수
p_id=[[] for i in range(n)]
for r in report:
#신고자 id, 신고당한 id
q,p=r.split()
#id_list의 인덱스 값
q_index=id_list.index(q)
p_index=id_list.index(p)
#같은 신고자가 이전에 동일한 id 신고한 적이 없을 경우에만 실행
if p not in p_id[q_index]:
count[p_index]+=1
p_id[q_index].append(p) #신고자 id의 인덱스 위치에 신고 당한 id 저장
for i in range(n):
#정지 기준 횟수를 넘으면 실행
if count[i]>=k:
p_result=id_list[i]
#정지당한 id를 신고한 id들 찾아서 메일 전송 횟수 +1
for j in range(n):
if p_result in p_id[j]:
answer[j]+=1
return answer
→ 신고자 id의 인덱스 위치에 신고한 id들을 값으로 넣음
- 다른 사람 풀이
def solution(id_list, report, k):
answer = [0] * len(id_list)
#딕셔너리 자료형 key값만 지정
dic_report = {id: [] for id in id_list} # 해당 유저를 신고한 ID
for i in set(report):
i = i.split()
#신고당한 id를 key값으로, 신고자를 value로 넣음
dic_report[i[1]].append(i[0])
for key, value in dic_report.items():
#신고자의 수가 정지 기준 횟수 이상일 때: 신고자들의 인덱스 구해서 메일 횟수 +1
if len(value) >= k:
for j in value:
answer[id_list.index(j)] += 1
return answer
* 중요 포인트
- 집합 자료형 이용 → 중복된 신고 하나로 합침
- for문에서 바로 set(report) 적용
- 딕셔너리(key-value) 자료형 이용
→ id_list에 있는 id들을 key값으로 집합 생성:
dic_report={ id: [ ] for id in id_list} (Key값을 인덱스처럼 []에 넣음)
→ .items() 함수 이용하여 key,value 값 한번에 불러오기
for key, value in dic_report.items():
- 공백으로 나눠져 있는 값 split()해서 한가지 변수에 넣으면 i값에 배열로 들어감 : i = i.split() → i[0], i[1]
- 신고당한 id 값: key / 그 id를 신고한 신고자들: value
→ 신고자의 수가 정지 기준 횟수 이상일 때: 신고자들의 인덱스 구해서 메일 횟수 +1
↳ ( 따로 count 값 만들지 X )
딕셔너리 자료형 개념
: Key와 Value를 한 쌍으로 갖는 자료형
[Python] 딕셔너리 자료형
딕셔너리 자료형 : Key와 Value를 한 쌍으로 갖는 자료형 딕셔너리 주의 사항 key 값은 고유한 값: 중복X 리스트는 key값으로 사용할 수 없다 ex) a={ [1,2] : 'hi' } 는 불가능 딕셔너리 만드는 법 a={1: 'hi'}
yygs321.tistory.com
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
| [프로그래머스] [Level 1] x만큼 간격이 있는 n개의 숫자 (0) | 2022.02.05 |
|---|---|
| [프로그래머스] [Level 1] 직사각형 별 찍기 (0) | 2022.02.05 |
| [프로그래머스] 가장 큰 수 (정렬) (0) | 2022.02.03 |
| [프로그래머스] K번째 수 (정렬) (0) | 2022.02.03 |
| [프로그래머스] 완주하지 못한 선수 (해시) (0) | 2022.01.26 |