본문 바로가기
반응형

팬디지털2

41. 프로젝트 오일러 #41 : 팬디지털 소수 이 문제의 난이도 5%입니다. 그렇게 어렵지 않은 문제이죠. 문제를 살펴보면 다음과 같습니다. 우리는 1부터 n까지 정확하게 한번씩만 사용한 n자리 숫자가 있다면, 이것을 팬디털(pandigital) 숫자라고 부릅니다. 예를 들어서 2143은 4자리 팬디지털 숫자이면서, 또한 소수입니다. 가장 큰 n자리 팬디지털 소수는 얼마일까요? 일단 팬디지털이라는 것을 알았으면, 우리는 간단하게 1~9까지 한번만 사용해서 이 숫자를 구하면 됩니다. 팬디지털을 만들 수 있는 가장 큰 자릿수는 9자리입니다. 왜냐하면 그 이상부터는 두자리숫자가 될 수밖에 없기 때문에 팬디지털 정의에 어긋납니다. 프로그램은 9자릿수부터 만들 수 있는 모든 팬디지털수를 만듭니다. (사실 이것을 1부터 n까지 배열하는 순열수입니다.) 순열 수.. 2015. 10. 27.
32. 프로젝트 오일러 #32 : 팬디지털 곱 32번 문제는 어려움 정도가 5%라 상당히 난이도가 낮은 문제네요. 이 문제는 일단 다음과 같은 접근을 생각했습니다. 어떤 수 n이 있습니다. 이 수에 대한 약수를 구합니다. 그러면 두 수를 구할 수 있겠죠. 그러면 이 수에 대해서 팬디지털인지 검사하면 됩니다. 두 수를 먼저 만든 후 곱하는 것보다는 하나의 수에 대해서 인수분해를 하는 것이 복잡도가 덜하겠다는 생각이 들더라고요. 팬디지털을 검사하는 로직은 일단 간단하게 했습니다. 사실 이 부분이 제일 핵심이기도 하고요. 팬디지털은 비트플래그를 이용합니다. 비트플래그에 중복이 생기면 팬디지털이 아닌 것이 되고요. 모두 다 체크되었다면 완벽하게 팬디지털이 되겠죠. 팬디지털인지 검사하기 위해서 검사하는 로직은 다음과 같습니다.첨부된 소스는 참고용으로만 봐주세.. 2015. 4. 13.
728x90