처음에는 순열의 합으로 접근하였다.
순열의 합 코드
1 2 3 4 5 6 7 8 9 10 11 12 | def combination(n, r): c = 1 r = min(r, n-r) for i in range(1, r+1): c *= (n-i+1)/i return int(c) def solution(n): answer = 0 for i in range(int(n/2)+1): answer += combination(n-i, i) return int(answer%1000000007) | cs |
그러나 실행 결과도 이상하고(아직도 이유를 모르겠다. n = 16 부터 값이 1씩 작게 나옴) 대부분은 런타임 에러가 났기 때문에 이러한 접근이 아니라고 빠르게 캐치했다.
그리고 실행 결과를 쭉 보다 보니 익숙한 수열... 피보나치였다.
순열의 합보다 훨씬 단순하게 접근이 가능했다. 이해하기도 훨씬 단순했다.
메모리 사용을 최소화 해야 마지막 효율성 테스트를 통과할 수 있었다.
최종 코드
1 2 3 4 5 | def solution(n): answer = [1,1] for i in range(2,n+1): answer[i%2] += answer[(i+1)%2] return int(answer[n%2]%1000000007) | cs |
'python > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv2 조이스틱 (0) | 2022.07.04 |
---|