ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [프로그래머스] Lv1. 모의고사 , Python
    Share/Pyhton 2021. 4. 9. 14:32

     

    문제

     

    알고리즘

    완전 탐색 

    • a,b,c 별로 순차적으로 비교해볼 정답을 리스트로 선언해놓는다. 
    • 정답 리스트와 i값을 증가시켜가며 순차적으로 비교한다 
    • 리스트 길이가 다르므로 모드연산으로 체크한다. 
    • 일치하면 각각 cnt값을 증가시킨다. 
    • (사실 리스트를 하나 더만들어서 append 하는 방법이 더 낫지만, 하다보니 그냥...) 
    •  
    • 최대값의 index 값을 알기위해서는 enumrate 함수를 사용해서 index 를 알아낸다. 
    • 출력 한다. 
    •  

    나의코드 

    def solution(answers):
      print(answers)
      a = [1,2,3,4,5]
      b = [2,1,2,3,2,4,2,5]
      c = [3,3,1,1,2,2,4,4,5,5]
      cntA =0
      cntB =0
      cntC =0
      result = []
    
      max_idx = None
      tmp = []
      for i in range(len(a)):
        # print(i)
        if(a[i] == answers[i]):
          cntA+=1
      for i in range(len(b)):
        # print(i)
        if(b[i] == (answers[i%(len(answers))])):
          cntB+=1
      for i in range(len(c)):
        # print(i)
        if(c[i] == (answers[i%(len(answers))])):
          cntC+=1
      
      print(cntA)
      print(cntB)
      print(cntC)
      tmp.append(cntA)
      tmp.append(cntB)
      tmp.append(cntC)
      print(tmp)
      
      
      for idx, num in enumerate(tmp):
        if num == max(tmp):
            result.append(idx+1)
      print("idx",result)
      
    
    solution([1,2,3,4,5])

    다른 코드 

    def solution(answers):
        p = [[1, 2, 3, 4, 5],
             [2, 1, 2, 3, 2, 4, 2, 5],
             [3, 3, 1, 1, 2, 2, 4, 4, 5, 5]]
        s = [0] * len(p)
    
        for q, a in enumerate(answers):
            for i, v in enumerate(p):
                if a == v[q % len(v)]:
                    s[i] += 1
        return [i + 1 for i, v in enumerate(s) if v == max(s)]

     

    다른코드도 비슷한 패턴이었는데, 이분의 코드는 더 간결하게 잘 작성한것 같다.

    첫번째 for문에서 q는 0 1 2 3 4 5 이렇게 인덱스가 증가할 테고, 두번째 for 문에서 5,6,7 길이가 초과 되는 애들만 

    다시 돌리는 경운데... 변수명이 너무가독성이 떨어져서 아쉽다. 

    결국 나머지 연산으로 루프 두개 돌려서 count 를 올리고 (여기서는 s) 그 요소를 최종출력한다. 

     

     

    느낀점 

    파이썬은 정말 많은 함수를 제공해서 편하기도 한데, 아직은 익숙치가 않아서 오히려 답답한 부분이 있다. 

    for문에서 두개씩돌리고 하는건 참 파이썬이 강력하게 만들어놨구나 하는 생각도 들고 

     

     

     

    댓글

실험중인 삶, Life is not a race