[프로그래머스] 코딩테스트 Lv1 실패율 [Python]

원준·2023년 4월 28일
0

코딩 테스트

목록 보기
8/18

1. 설명

2. 내가 한 코드

  • 이전에 했던 코딩테스트에 연습한 것이 있어서 그런지 바로 통과 되었다.

  • 각각의 스테이지 클리어 한 사람의 수들을 dict로 묶어서 알아 냈다.

    • 각각의 스테이지 클리어 한 사람의 수와 전체 유저 수의 계산을 한 후 value를 기준으로 정렬하니 완성 되었다.

      def solution(N, stages):
      answer = []
      
      person = {}
      max_person = len(stages)
      for i in range(1, N+1):
          person[i] = stages.count(i) / max_person if stages.count(i) != 0 else 0
          max_person -= stages.count(i)
      person_sort = sorted(person.items(), key= lambda item: item[1], reverse=True)
      
      
      return [i[0] for i in person_sort]
  • 하지만, 특정 구간에서 너무 말도 안되는 속도가 걸려버리면서 다른 방법을 찾기 위해 노력했다,

    • 이에 예상 되는 부분은 dict를 만들고 dict를 기준으로 다시 정렬해서 tuple로 만들다 보니 시간이 오래걸리는 것으로 예상했다.

3. 찾아낸 코드

  • 확실히 이전과는 다른 속도를 보여주는 코드를 발견했다.
    • 아쉽게도 스스로 생각해서 못한게 아쉽긴 하지만 다양한 방법을 접하는 것도 좋아보인다.
    def solution(N, stages):
      answer = []
      fail = []
      info = [0] * (N + 2)
      for stage in stages:
          info[stage] += 1
      for i in range(N):
          be = sum(info[(i + 1):])
          yet = info[i + 1]
          if be == 0:
              fail.append((str(i + 1), 0))
          else:
              fail.append((str(i + 1), yet / be))
      for item in sorted(fail, key=lambda x: x[1], reverse=True):
          answer.append(int(item[0]))
          
      return answer

4. 차이점

  • tuple로 변환해서 비교하는 것이면 list로 생성한 후 비교하는 것이 더 빠르다는 것이 충격 이였다.
  • dict로 나타내는 것이 아닌 각각의 위치에 따라 있는지 없는지 판별할때에도 좋은 방법 이라고 생각한다.
profile
공부해보자

0개의 댓글