Posts

프로젝트 오일러 41

n 자리 팬디지털 소수 중에서 가장 큰 수

문제 자세히 보기: [국어] [영어]

두 가지 방법이 떠오른다. 하나는 clojure.contrib.lazy-seqsprimes를 이용하는 방법이다. 가장 큰 팬디지털 수는 987654321이므로 이걸 상한으로 소수를 하나씩 조사해가며 팬디지털 수인지 확인해 가장 큰 수를 구하면 된다. 그러나 이 방법은 987654321보다 작은 수 중 가장 큰 소수에 도달할 때까지 확인을 해야 하므로 답을 빠르게 구하기는 어려워 보인다.

Read more...

프로젝트 오일러 40

어떤 무리수에서 소수점 n 번째 자리 숫자 알아내기

문제 자세히 보기: [국어] [영어]

이 문제를 푸는 데는 특별히 복잡한 알고리즘이 필요하지 않다. 그냥 문제에서 설명한 대로 소수점 아래 수에 대한 시퀀스를 만들고, 1번째, 10번째, ... , 1,000,000번째 요소를 구해 모두 곱하면 그만이다. Clojure로는 특히 이런 문제를 쉽게 풀 수 있는 것 같다.

Read more...

프로젝트 오일러 39

가장 많은 직각삼각형이 만들어지는 둘레(≤ 1000)의 길이는?

문제 자세히 보기: [국어] [영어]

세 변의 길이가 자연수인 직삼각형을 가장 많이 만들 수 있는 둘레 길이를 찾는 문제다. Pythagorean triple > Generating a triple에 유클리드 공식을 사용해 피타고라스 수를 구하는 방법이 나와있다.

Read more...

프로젝트 오일러 38

어떤 수에 (1, 2, ... )를 곱해서 이어붙여 얻을 수 있는 가장 큰 1 ~ 9 팬디지털 숫자

문제 자세히 보기: [국어] [영어]

(1, 2, ...)를 곱해서 이어붙일 어떤 수는 네 자리 이하의 수여야 한다. n이 1보다 커야 하므로, 어떤 수가 다섯 자리라면 (1, 2)를 곱해 이어붙일 경우 아홉 자리를 넘어버리기 때문이다. 따라서 네 자리 수 중 가장 큰 9999부터 숫자를 줄여가며 답을 찾으면 문제를 쉽게 풀 수 있다.

Read more...

프로젝트 오일러 37

왼쪽이나 오른쪽에서 한 자리씩 없애가도 여전히 소수인 수의 합은?

문제 자세히 보기: [국어] [영어]

어떤 수를 왼쪽이나 오른쪽에서 한 자리 없앤 수를 구하는 함수가 있다면 이 문제를 풀 때 도움이 될 것이다. 문제 35에서 순환수를 만들 때 사용했던 방법을 활용하면 이 함수를 쉽게 구현할 수 있다. 순환수를 구할 때는 숫자를 잘라 다시 붙여야 했지만 여기서는 그냥 잘라내기만 하면 되므로 오히려 더 간단하다고 할 수 있다.

Read more...

프로젝트 오일러 36

10진법과 2진법으로 모두 대칭수인 1,000,000 이하 숫자의 합

문제 자세히 보기: [국어] [영어]

어떤 수가 대칭인지 확인하는 방법은 이미 문제 4에서 설명했다. 이진수는 어차피 문자열로 표현해야 하므로 여기서는 다음과 같이 문자열을 인자로 받아 대칭인지 확인하는 함수를 만들어 두는 것이 좋겠다.

Read more...

프로젝트 오일러 35

백만 이하인 circular prime 개수 구하기

문제 자세히 보기: [국어] [영어]

백만 이하의 소수는 clojure.contrib.lazy-seqsprimes를 이용해 구할 수 있다. digits를 이용해 숫자의 시퀀스를 만들고 cyclepartition을 이용하면 순환수(circular number)도 쉽게 구할 수 있다.

Read more...

프로젝트 오일러 34

각 자릿수의 팩토리얼을 더했을 때 자기 자신이 되는 수들의 합은?

문제 자세히 보기: [국어] [영어]

먼저 각 자릿수의 팩토리얼을 더한 값을 구하는 함수는 다음과 같이 작성할 수 있다.

Read more...

프로젝트 오일러 33

이상한 방법으로 약분할 수 있는 분수 찾기

문제 자세히 보기: [국어] [영어]

값이 1보다 작고 분모와 분자가 모두 두 자릿수인 분수는 모두 4005개다. 이 정도라면 그냥 루프를 돌려 확인해도 금방 답을 찾을 수 있다. 이상한 방법으로 약분하는 함수는 다음과 같이 작성할 수 있다. n은 numerator, 즉 분자를 나타내며, d는 denominator, 즉 분모를 나타낸다.

Read more...

프로젝트 오일러 32

1~9 팬디지털 곱셈식을 만들 수 있는 모든 수의 합

문제 자세히 보기: [국어] [영어]

a \times b = c 가 1-9 팬디지털이 되려면 다음과 같은 이유로 c 가 네 자리 숫자여야 한다.

Read more...