TIL-51. [코딩테스트-시간초과] 프로그래머스 lv1. 신고 결과 받기

solarrrrr·2022년 1월 24일
0

Today I Learned

목록 보기
51/74
post-thumbnail

[생각해 본 접근 방법]

  1. 중복된 요소 제거(set, 중복 신고 제거)
  2. 신고 횟수 확인(count)
  3. k의 조건에 해당하는 유저를 신고한 신고자에게 + 1(딕셔너리의 벨류값으로 처리, 이메일 발송 횟수)
  4. 주어진 id_list 유저 순서에 맞게 딕셔너리에서 벨류값(이메일 발송 횟수)을 가져와서 리스트 형태로 반환
def solution(id_list, report, k):
  report_list = []
  answer = []
  id_dic = {i.split(' ')[0]:0 for i in id_list}
  report = list(set(report))
  
  for i in range(len(report)):
    report_list.append(report[i].split()[1])

  for i in range(len(id_list)):
    for j in range(len(id_list)):
      if k <= report_list.count(id_list[j]):
        for l in range(len(report)):
          user = id_list[i] + ' ' + id_list[j]
          if user == report[l]:
            id_dic[id_list[i]] = id_dic[id_list[i]] + 1
  answer = [id_dic[i] for i in id_list]
  return answer

id_list = ["muzi", "frodo", "apeach", "neo"]
report = ["muzi frodo","apeach frodo","frodo neo","muzi neo","apeach muzi"]
k = 2

solution(id_list, report, k)

코드를 작성하면서 항상 느끼는데 너무 비효율적으로 짜고 있다.
경험이 부족해서 그런 거 같은데
문제에 대한 접근도, 코드로 옮기는 방법도 초보자 단계를 벗어나지 못해서
이런 비효율적인 코드가 나왔다.

답은 제대로 나오지만 역시 시간 오버로 테스트에 통과가 되지 못했다.
간결한 방법을 다시 생각해서 풀어봐야겠다.

profile
몰입

0개의 댓글