본문 바로가기
반응형

Project Euler7

[Project Euler 38] 어떤 수에 (1, 2, ... )를 곱해서 이어붙여 얻을 수 있는 가장 큰 1 ~ 9 팬디지털 숫자 숫자 192에 1, 2, 3을 각각 곱합니다. 192 × 1 = 192 192 × 2 = 384 192 × 3 = 576 곱한 결과를 모두 이어보면 192384576 이고, 이것은 1 ~ 9 팬디지털(pandigital)인 숫자입니다. 이런 과정을 편의상 '곱해서 이어붙이기'라고 부르기로 합니다. 같은 식으로 9와 (1, 2, 3, 4, 5)를 곱해서 이어붙이면 918273645 라는 1 ~ 9 팬디지털 숫자를 얻습니다. 어떤 정수와 (1, 2, ... , n)을 곱해서 이어붙였을 때 얻을 수 있는 가장 큰 아홉자리의 1 ~ 9 팬디지털 숫자는 무엇입니까? (단 n > 1) 이 문제를 풀려고 미뤄뒀던 32번 팬디지털 문제를 풀었다. 예전에는 끙끙거리면서 결국 못 풀었는데 요즘 그래도 늘고 있는지 둘 다 .. 2016. 5. 4.
[Project Euler 32] 1~9 팬디지털 곱셈식을 만들 수 있는 모든 수의 합 1부터 n까지의 각 숫자를 한번씩만 써서 만들 수 있는 숫자를 팬디지털(pandigital)이라고 합니다. 예를 들면 15234는 1부터 5의 숫자가 한번씩만 쓰였으므로 1 ~ 5 팬디지털입니다. 7254라는 숫자는 그런 면에서 특이한데, 39 × 186 = 7254 라는 곱셈식을 만들 때 이것이 1 ~ 9 팬디지털이 되기 때문입니다. 이런 식으로 a × b = c 가 1 ~ 9 팬디지털이 되는 모든 c의 합은 얼마입니까? (참고: 어떤 c는 두 개 이상의 (a, b)쌍에 대응될 수도 있는데, 이런 경우는 하나로 칩니다) 오늘 건...좀 멍청하게 짰다. 수도코드도 짜지 않았고... 풀기 귀찮아서 계속 미루다가 38번이 팬디지털을 응용하는 문제여서 풀었다. 좀더 예쁘게 짤 수 있을 것 같은데... 팬디지털.. 2016. 5. 2.
[Project Euler 37] 왼쪽이나 오른쪽에서 한자리씩 없애가도 여전히 소수인 수의 합은? 소수 3797에는 왼쪽부터 자리수를 하나씩 없애거나 (3797, 797, 97, 7) 오른쪽부터 없애도 (3797, 379, 37, 3) 모두 소수가 되는 성질이 있습니다.이런 성질을 가진 소수는 단 11개만이 존재합니다. 이것을 모두 찾아서 합을 구하세요.(참고: 2, 3, 5, 7은 제외합니다) 이번엔 문제가 간단해 보여서 수도 코드를 짜지 않았다.소수가 나왔으므로 역시나 primesieve 모듈을 사용했다.처음엔 아래 적어놓은 조건대로 for loop를 돌릴까 했으나, primesieve가 훨씬 편해서... 아래는 테스트코드 2016. 4. 29.
[Project Euler 36] 10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합 대칭수(palindrome)인 585는 2진수로 나타내도 10010010012가 되어 여전히 대칭수입니다. 10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합을 구하세요. (주의: 첫번째 자리가 0이면 대칭수가 아님) 이번 거는 긴 버전, 짧은 버전 두 개로 만들어 봤다. python에 2진수를 구하는 함수 bin()이 있어서 정말 편하게 짰다! 아래는 먼저 짠 수도 코드. 이번엔 완벽히 수도 코드대로 짜서 기분 좋다. 짜고 나서 굉장히 뿌듯했던ㅎㅎ 긴 버전은 함수명만 보고도 어떤 과정을 거치는지 자세히 알 수 있도록 짰다. 짧은 버전은 말그대로 짧게! 아래는 매번 짜고 있는 테스트 함수다. 물론 알고리즘이 간단한 코드로 끝날 때에는 좀 번거롭기도 하지만 함수가 세 개 이상으로 늘어날 .. 2016. 4. 27.
반응형