오늘의 문제 신고결과 받기
지난번에 풀었던 다트게임보다는 쉽다고 생각하고 시작했지만 생각보다 시간이 걸렸다.
첫 번째 제출한 답은 아래와 같다.
def solution(id_list, report, k):
s = [i.split(' ') for i in set(report)]
#신고 당한 사람 : 신고당한 횟수를 딕셔너리로 저장하기
d = {}
for i in s :
if i[1] in d:
d[i[1]] += 1
else:
d[i[1]] = 1
#신고 횟수를 초과하는 사람의 이름을 리스트로 만들기
l = [i for i in d.keys() if d[i] >= k]
#이메일 받을 유저 (중복)저장
email = []
for i in s:
if i[1] in l:
email += [i[0]]
#각각의 유저가 이메일을 받은 횟수 저장
answer = [email.count(i) for i in id_list]
return answer
코드 수행 시간이 너무 오래 걸리는 것 같아서 수정한 답은 아래와 같다.
def solution(id_list, report, k):
reporter = []
reported = []
reported_time = {}
emailed = []
answer = []
for i in set(report):
reporter += [str(i.split(' ')[0])]
reported += [str(i.split(' ')[1])]
for someone in reported:
if someone in reported_time:
reported_time[someone] += 1
else:
reported_time[someone] = 1
for i in range(len(reported)):
if reported_time[reported[i]] >= k:
emailed += [reporter[i]]
for user in id_list:
answer += [emailed.count(user)]
return answer
속도에서는 첫 번째 쓴 코드보다는 개선이 많이 되었다.
답을 수정한 후에도 이것 저것 고치며 속도를 테스트 해봤는데,
어떤 경우는 개선되고, 어떤 경우는 악화되고 해서 뭐가 영향을 미치는건지 모르겠다.
다만 첫 번째 경우는 변수 이름을 너무 마구잡이로 지어서 나도 보기 헷갈리는데,
수정한 후에는 그래도 이해할만 한 것 같다.
오늘의 기억하고 싶은 코드는...
일단 set로 중복을 없애는 것 - 지난번에 다른 분 코드에서 보고 기억하고 있었다.
dictionary에 키가 있고, 없을 때를 구분해서 키를 추가하고 값을 할당하는 것과, 있는 값을 갱신하는 코드이다.
아래의 코드는 키가 있으면 값에 +1 하고, 없으면 키를 추가하고 값을 1로 초기화 하는 것이다.
dict = {}
for key in keys:
if key in dict:
dict[key] += 1
else:
dict[key] = 1
간단하지만 떠올리니 막상 떠오르지 않아서...
오늘도 슨배림들의 답 몇 개를 가져왔다.
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
# 생각만으로 index를 쓰면 더 느려지지 않을까 싶어서 무심코 생략했는데,
# 실제로 구현 된 걸 보니 내가 이렇게 쓸 수 있을까 싶고
# 내 코드도 고쳐봐야겠다.
for r in set(report):
if reports[r.split()[1]] >= k:
answer[id_list.index(r.split()[0])] += 1
return answer
def solution(id_list, report, k):
answer = []
a = list(set(report))
dictionary2 = {name : 0 for name in id_list}
dictionary = {name : [] for name in id_list}
#dictionary 만들기 참고^_^
for i in a:
dictionary[i.split()[1]].append(i.split()[0])
for i in dictionary:
if len(dictionary[i]) >= k:
for j in dictionary[i]:
dictionary2[j] += 1
for i in dictionary2:
answer.append(dictionary2[i])
return answer