문제
https://school.programmers.co.kr/learn/courses/30/lessons/92334
설계
- 그런것 없고 그냥 깡 구현하려고 했다.
- 나름대로의 로직을 순서대로 정하고 접근했지만, 결국 테스트케이스 중 2개가 시간초과 때문에 통과하지 못했다.
# 시간초과로 통과하지 못한 코드
def solution(id_list, report, k):
N = len(id_list)
answer = [0] * len(id_list) # 편지함
person = [[] for _ in range(N)] # 사람들 index
# 중복 신고 제거
report = list(set(report))
# 신고함 확인하기
for i in range(len(report)):
data = report[i].split() # data = [신고한 사람, 신고 당한 사람]
for j in range(N):
if data[0] == id_list[j]:
reporter = j # 신고한 사람 index
if data[1] == id_list[j]:
reported = j # 신고당한 사람 index
person[reported].append(reporter) # 신고당한 사람 index에 신고한 사람의 index 넣어주기
# 메일 보내기
for i in range(N):
if len(person[i]) >= k:
for j in range(len(person[i])):
if person[i][j] >= 0:
answer[person[i][j]] += 1 # 신고자에게 편지를 1통씩 보낸다.
return answer
defaultdict()
구글링을 해보니 한번도 사용해본적이 없는 defaultdict()를 활용한 풀이가 있어 공부겸 참고했다.
사용법은 구글링을 하였다. (참고: https://appia.tistory.com/218 등)
from collections import defaultdict
def solution(id_list, report, k):
answer = []
user = defaultdict(set) # user별 신고한 id
cnt = defaultdict(int) # user별 신고당한 횟수
# 중복 신고 제거
report = list(set(report))
# 신고함 확인
for data in report:
reporter, reported = data.split()
user[reporter].add(reported) # 신고자에 신고한 id 추가
cnt[reported] += 1 # 신고당한 id에 신고횟수 추가
# 메일함 확인
for i in id_list:
mail = 0
for j in user[i]: # user가 신고한 id가 K번 이상 당했으면 메일 받기
if cnt[j] >= k:
mail += 1
answer.append(mail)
return answer
코드 참고 : https://velog.io/@stella317/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%8B%A0%EA%B3%A0-%EA%B2%B0%EA%B3%BC-%EB%B0%9B%EA%B8%B0Python
Etc...
코드 제출 후 길이가 짧은 대표 코드가 있어 참고로 가져왔다.
def solution(id_list, report, k):
answer = [0] * len(id_list)
reports = {x : 0 for x in id_list}
for r in set(report):
reports[r.split()[1]] += 1
for r in set(report):
if reports[r.split()[1]] >= k:
answer[id_list.index(r.split()[0])] += 1
return answer
'PS (Problem Solving) > Programmers' 카테고리의 다른 글
[프로그래머스] 크레인 인형뽑기 게임 - 자바스크립트, 파이썬 (0) | 2022.08.04 |
---|---|
[프로그래머스] 신규 아이디 추천 (0) | 2022.07.28 |
[프로그래머스] SQL 고득점 Kit - IS NULL (0) | 2022.04.19 |
[프로그래머스] SQL 고득점 Kit - GROUP BY (0) | 2022.04.19 |
[프로그래머스] SQL 고득점 Kit - SUM, MAX, MIN (0) | 2022.04.19 |