log.Sehee
[프로그래머스] 신고 결과 받기 본문
사용 입출력 예제
id_list = ["muzi", "frodo", "apeach", "neo"]
report = ["muzi frodo", "apeach frodo", "frodo neo", "muzi neo", "apeach muzi"]
k = 2
1)
정확성테스트 : 시간초과
더보기
테스트 1 〉 | 통과 (0.02ms, 10.1MB) |
테스트 2 〉 | 통과 (0.06ms, 10.3MB) |
테스트 3 〉 | 실패 (시간 초과) |
테스트 4 〉 | 통과 (0.11ms, 10.2MB) |
테스트 5 〉 | 통과 (0.19ms, 10.2MB) |
테스트 6 〉 | 통과 (16.51ms, 10.5MB) |
테스트 7 〉 | 통과 (33.74ms, 10.8MB) |
테스트 8 〉 | 통과 (37.29ms, 11.2MB) |
테스트 9 〉 | 통과 (9701.77ms, 26.8MB) |
테스트 10 〉 | 실패 (시간 초과) |
테스트 11 〉 | 실패 (시간 초과) |
테스트 12 〉 | 통과 (9.45ms, 10.2MB) |
테스트 13 〉 | 통과 (9.82ms, 10.3MB) |
테스트 14 〉 | 실패 (시간 초과) |
테스트 15 〉 | 실패 (시간 초과) |
테스트 16 〉 | 통과 (1.96ms, 10.4MB) |
테스트 17 〉 | 통과 (9.59ms, 10.1MB) |
테스트 18 〉 | 통과 (18.39ms, 10.2MB) |
테스트 19 〉 | 통과 (36.64ms, 10.5MB) |
테스트 20 〉 | 실패 (시간 초과) |
테스트 21 〉 | 실패 (시간 초과) |
테스트 22 〉 | 통과 (0.01ms, 10.2MB) |
테스트 23 〉 | 통과 (0.01ms, 10MB) |
테스트 24 〉 | 통과 (0.01ms, 10.2MB) |
# 1)
def solution(id_list, report, k):
report = set(report) # 중복 신고 제거
answer, record = [], []
report_count = {}
for id in id_list:
report_count[id] = 0 # {'muzi': 0, 'frodo': 0, 'apeach': 0, 'neo': 0}
answer.append(0) # [0, 0, 0, 0]
for id in id_list:
report_id = []
for n in report:
r = n.split()
if r[0] == id:
report_id.append(r[1]) # id_list의 인덱스 순서대로 id가 신고한 유저를 리스트에 저장
report_count[r[1]] += 1 # 신고당한 유저는 카운트 +1
record.append(report_id)
# record : [['neo', 'frodo'], ['neo'], ['frodo', 'muzi'], []]
# report_count : {'muzi': 1, 'frodo': 2, 'apeach': 0, 'neo': 2}
for i in range(len(id_list)):
for n in record[i]: # report_count의 value값이 k보다 크거나 같은지 검사
if k <= report_count[n]: # record에 포함되어 있는 위치의 인덱스와 같은 자리의 answer 인덱스에 +1
answer[i] += 1
return answer # [2, 1, 1, 0]
2)
정확성테스트
더보기
테스트 1 〉 | 통과 (0.01ms, 10.3MB) |
테스트 2 〉 | 통과 (0.04ms, 10MB) |
테스트 3 〉 | 통과 (233.44ms, 46.6MB) |
테스트 4 〉 | 통과 (0.05ms, 10.1MB) |
테스트 5 〉 | 통과 (0.04ms, 10.2MB) |
테스트 6 〉 | 통과 (1.19ms, 10.4MB) |
테스트 7 〉 | 통과 (2.06ms, 10.6MB) |
테스트 8 〉 | 통과 (2.68ms, 11.1MB) |
테스트 9 〉 | 통과 (75.54ms, 26.9MB) |
테스트 10 〉 | 통과 (69.06ms, 26.9MB) |
테스트 11 〉 | 통과 (211.09ms, 46.4MB) |
테스트 12 〉 | 통과 (0.24ms, 10.1MB) |
테스트 13 〉 | 통과 (0.20ms, 10.2MB) |
테스트 14 〉 | 통과 (67.27ms, 24.1MB) |
테스트 15 〉 | 통과 (93.67ms, 36.6MB) |
테스트 16 〉 | 통과 (0.18ms, 10.3MB) |
테스트 17 〉 | 통과 (0.30ms, 10.1MB) |
테스트 18 〉 | 통과 (0.38ms, 10.3MB) |
테스트 19 〉 | 통과 (0.52ms, 10.3MB) |
테스트 20 〉 | 통과 (60.73ms, 24.1MB) |
테스트 21 〉 | 통과 (105.94ms, 36.5MB) |
테스트 22 〉 | 통과 (0.01ms, 9.98MB) |
테스트 23 〉 | 통과 (0.01ms, 10.2MB) |
테스트 24 〉 | 통과 (0.01ms, 10.1MB) |
# 2)
def solution(id_list, report, k):
report = set(report)
user, d_answer = {}, {}
answer = []
for id in id_list:
user[id] = []
d_answer[id] = 0
for i in report:
name = i.split()
user[name[1]].append(name[0]) # key: 신고당한 유저 / value: 신고한 유저
# {'muzi': ['apeach'], 'frodo': ['muzi', 'apeach'], 'apeach': [], 'neo': ['frodo', 'muzi']}
for i in id_list:
if k <= len(user[i]): # 신고한 유저가 k명 이상인 유저를
for n in user[i]:
d_answer[n] += 1 # 신고한 유저 카운트 +1
# {'muzi': 2, 'frodo': 1, 'apeach': 1, 'neo': 0}
for i in id_list:
answer.append(d_answer[i]) # id_list의 인덱스 순서대로 answer에 append
return answer # [2, 1, 1, 0]
3)
정확성테스트
더보기
테스트 1 〉 | 통과 (0.02ms, 10.3MB) |
테스트 2 〉 | 통과 (0.04ms, 10.3MB) |
테스트 3 〉 | 통과 (175.64ms, 46.2MB) |
테스트 4 〉 | 통과 (0.04ms, 10.2MB) |
테스트 5 〉 | 통과 (0.03ms, 10.3MB) |
테스트 6 〉 | 통과 (0.79ms, 10.5MB) |
테스트 7 〉 | 통과 (1.25ms, 10.6MB) |
테스트 8 〉 | 통과 (2.96ms, 11.1MB) |
테스트 9 〉 | 통과 (78.22ms, 27.1MB) |
테스트 10 〉 | 통과 (48.84ms, 27MB) |
테스트 11 〉 | 통과 (151.38ms, 46.1MB) |
테스트 12 〉 | 통과 (0.23ms, 10.3MB) |
테스트 13 〉 | 통과 (0.19ms, 10.4MB) |
테스트 14 〉 | 통과 (42.91ms, 24.2MB) |
테스트 15 〉 | 통과 (92.09ms, 36.7MB) |
테스트 16 〉 | 통과 (0.12ms, 10.2MB) |
테스트 17 〉 | 통과 (0.21ms, 10.3MB) |
테스트 18 〉 | 통과 (0.34ms, 10.3MB) |
테스트 19 〉 | 통과 (0.55ms, 10.4MB) |
테스트 20 〉 | 통과 (41.21ms, 24MB) |
테스트 21 〉 | 통과 (83.32ms, 36.7MB) |
테스트 22 〉 | 통과 (0.01ms, 10.3MB) |
테스트 23 〉 | 통과 (0.01ms, 10.2MB) |
테스트 24 〉 | 통과 (0.01ms, 10.3MB) |
def solution(id_list, report, k):
report = set(report)
user, d_answer = {}, {}
answer = []
for id in id_list:
user[id] = []
d_answer[id] = 0
for i in report:
name = i.split()
user[name[1]].append(name[0])
for i, n in user.items(): # .items 사용, 딕셔너리의 값을 바로 사용하도록 리펙토링
if k <= len(n):
for j in n:
d_answer[j] += 1
# for i in id_list:
# if k <= len(user[i]):
# for n in user[i]:
# d_answer[n] += 1
for i in id_list:
answer.append(d_answer[i])
return answer
보충
정확성 테스트 :
이번 문제는 for문 하나 더 돌려서 인덱스 자리에 맞게 append 하는 것보다 .index가 느리다
더보기
테스트 1 〉 | 통과 (0.02ms, 10.4MB) |
테스트 2 〉 | 통과 (0.03ms, 10.1MB) |
테스트 3 〉 | 통과 (1350.20ms, 46.3MB) |
테스트 4 〉 | 통과 (0.03ms, 10MB) |
테스트 5 〉 | 통과 (0.03ms, 10.3MB) |
테스트 6 〉 | 통과 (0.81ms, 10.6MB) |
테스트 7 〉 | 통과 (2.67ms, 10.6MB) |
테스트 8 〉 | 통과 (3.92ms, 11.1MB) |
테스트 9 〉 | 통과 (383.05ms, 27MB) |
테스트 10 〉 | 통과 (53.61ms, 26.9MB) |
테스트 11 〉 | 통과 (522.13ms, 46.5MB) |
테스트 12 〉 | 통과 (0.53ms, 10.2MB) |
테스트 13 〉 | 통과 (0.19ms, 10.1MB) |
테스트 14 〉 | 통과 (466.63ms, 24.1MB) |
테스트 15 〉 | 통과 (86.99ms, 36.6MB) |
테스트 16 〉 | 통과 (0.16ms, 10.2MB) |
테스트 17 〉 | 통과 (0.36ms, 10.4MB) |
테스트 18 〉 | 통과 (0.89ms, 10.2MB) |
테스트 19 〉 | 통과 (2.17ms, 10.1MB) |
테스트 20 〉 | 통과 (442.28ms, 24.1MB) |
테스트 21 〉 | 통과 (918.16ms, 36.7MB) |
테스트 22 〉 | 통과 (0.01ms, 9.96MB) |
테스트 23 〉 | 통과 (0.01ms, 10.1MB) |
테스트 24 〉 | 통과 (0.01ms, 10.1MB) |
def solution(id_list, report, k):
report = set(report)
# 딕셔너리도 컴프리헨션이 가능함
user = {i: [] for i in id_list}
# for문보다 곱하기가 빠른가?
answer = [0] * len(id_list)
for i in report:
name = i.split()
user[name[1]].append(name[0])
# .items() 딕셔너리의 key, value 쌍을 얻을 수 있다
for i, n in user.items():
if len(n) >= k:
for j in n:
# .index() 배열에서 값의 위치를 찾아준다
answer[id_list.index(j)] += 1
return answer