Pow(x, n)
x의 n제곱을 구하는 코드를 작성하는 문제. 빌트인 라이브러리로 너무나 쉽게 풀리는 문제지만, 그건 문제의 취지에 어긋나니 직접 풀었다. 너무 방심하다가 시간 초과로 고생... 캐시 적중율을 높이기 위해 최대한 짝수로 제곱하도록 나누었다. https://leetcode.com/problems/powx-n/ class Solution: def myPow(self, x: float, n: int) -> float: if not x: return 0 if 0 > n: x = 1 / x return self.__myPow3( x, abs( n ), { 0 : 1, 1 : x } ) def __myPow3( self, x, n, cache ): if n in cache: return cache[ n ] else:..
2019. 10. 24.
파이썬에서 A = [1,2,3]와 A[:] = [1,2,3]의 차이
회사에서 파이썬을 사용한다. 덕분에 파이썬 고수들이 많다. 그 덕에 찾아도 못 찾는 지식들의 해답을 찾을 수 있어서 좋다. 이번 것도 그 중의 하나이다. A = [1, 2, 3]과 A[:] = [1, 2, 3] 은 어떤 차이가 있을까. 한 동안 나는 이것이 어째서 다른지 이해되지 않았다. 그렇다고 검색 엔진에 조회하기도 애매한 질문이다. 내게 알려준 분은 예제 코드를 제시하면서 설명해줬는데, 백문이 불여일견이었다. 이 둘은 사실 용법 차이이며, 왜 다른지 인식하려면 그 편이 명확하다. 좌측은 객체가 생성되었다. 우측은 참조의 값을 바꾼 셈이 되었다. 파이썬의 디스어셈블리 모듈(dis)을 사용하면 좀더 확연히 알 수 있다. 아래 그림에서 31 STORE_FAST를 보자. a에 새로운 주소가 할당되었다. 이..
2012. 3. 13.
셀프 넘버들의 합 구하기
오밤중에 심심해서 이런 일을 했다. 퀴즈를 푸는 일. 1번 설명 어떤 자연수 n이 있을 때, d(n)을 n의 각 자릿수 숫자들과 n 자신을 더한 숫자라고 정의하자. 예를 들어 d(91) = 9 + 1 + 91 = 101 이 때, n을 d(n)의 제네레이터(generator)라고 한다. 위의 예에서 91은 101의 제네레이터이다. 어떤 숫자들은 하나 이상의 제네레이터를 가지고 있는데, 101의 제네레이터는 91 뿐 아니라 100도 있다. 그런데 반대로, 제네레이터가 없는 숫자들도 있으며, 이런 숫자를 인도의 수학자 Kaprekar가 셀프 넘버(self-number)라 이름 붙였다. 예를 들어 1, 3, 5, 7, 9, 20, 31 은 셀프 넘버 들이다. 1번 문제 1 이상이고 5000 보다 작은 모든 셀프..
2012. 1. 14.