프로젝트 오일러 62
자릿수로 만든 순열 중에서 5개가 세제곱수인 가장 작은 숫자는?
처음 떠오른 생각은 이렇다. 숫자를 증가시키면서 그 수자 세제곱수인지 확인하고, 세제곱수라면 자릿수로 순열을 만들어 그 중 세제곱수인 것만 골라내서 다섯 개가 되는지 확인하는 방법을 생각할 수 있다. 그러나 이 방법은 쉽지도 않고 비효율적이다. 숫자의 대부분이 세제곱수가 아니고 세제곱수의 순열도 대부분 세제곱수가 아닐 것이기 때문이다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
자릿수로 만든 순열 중에서 5개가 세제곱수인 가장 작은 숫자는?
처음 떠오른 생각은 이렇다. 숫자를 증가시키면서 그 수자 세제곱수인지 확인하고, 세제곱수라면 자릿수로 순열을 만들어 그 중 세제곱수인 것만 골라내서 다섯 개가 되는지 확인하는 방법을 생각할 수 있다. 그러나 이 방법은 쉽지도 않고 비효율적이다. 숫자의 대부분이 세제곱수가 아니고 세제곱수의 순열도 대부분 세제곱수가 아닐 것이기 때문이다.
순환적인 성질을 갖는 4자리 다각수 여섯 개의 합
네 자리 다각수의 집합을 구한 다음 앞 두 자리를 키로 하여 맵을 만들어 놓으면 꼬리를 무는 수를 쉽게 찾을 수 있다.
다섯 소수 중 어떤 두 개를 이어붙여도 소수가 되는 수 찾기
이 문제를 공략하는 기본 아이디어는 다음과 같다.
ps1
을 미리 구한다.ps1
에서 두 수를 골라 앞/뒤로 이어붙여도 소수가 되는 쌍의 집합 ps2
를 구한다.XOR 방식으로 암호화된 메시지 깨기
암호화 키가 영어 소문자 세 개로 되어 있으므로, aaa
부터 zzz
까지 모두 시도해본다 해도 경우의 수는 밖에 되지 않는다. 이 정도면 무차별 대입법으로 공략해도 충분할 것 같다.
나선모양 격자의 대각선상에 있는 소수의 비율 추적하기
문제 28에서 나선모양 행렬의 대각선 요소를 구하는 공식을 유도했다. 그때는 나선모양이 시계 방향으로 돌았고 여기서는 나선모양이 반시계 방향으로 돌아 방향이 다르지만 문제를 푸는 데 영향을 끼치지는 않는다.
제곱근 2의 연분수꼴 살펴보기
문제에 있는 의 연분수꼴 수식은 다음과 같다.
형태의 자연수에 대해 자릿수 합의 최대값 구하기
문제 16에서 만든 pow
함수를 이용하면 문제를 쉽게 풀 수 있다.
10000 미만의 라이크렐 수 (Lychrel number) 세기
숫자를 뒤집어서 더한 후 대칭수인지 확인해야 하므로 다음과 같이 숫자를 뒤집는 함수와 숫자가 대칭수인지 확인하는 함수를 미리 만들어 두면 문제를 푸는 데 도움이 될 것이다.
포커 게임에서 이긴 회수 구하기
이 문제를 푸는 데 수학적인 지식이나 통찰은 전혀 필요하지 않은 것으로 보였다. 그저 주어진 카드 패가 어떤 계급인지 판단하는 방법을 구현하고 계급에 따라 승패를 정해 1번 선수가 이긴 횟수를 구하기만 하면 되는 단순한 문제로 보였다. 이렇게 해도 답을 구하는 데는 전혀 문제가 없었지만, 마음에 들지 않았다. 패가 특정 계급인지 판단하는 여러 개의 함수와 연속된 조건문... 더 좋은 방법이 없을까?
영국에 와서 제일 먼저 해야 하는 일 중 하나가 은행 계좌 만들기였다. 영국에 오기 전 이주 담당자가 Lloyds와 Nat West 두 은행을 소개해 주었다. 특히 Lloyds를 선택할 경우 계좌를 신속하게 만들어주는 절차가 있다고 하며 매니저 전화번호와 메일주소까지 알려주었다. 그래서 나처럼 이주하는 사람들을 위해 미리 준비된 절차가 있을 거라 기대했다.