휴대폰이 없어 생긴 일
한국을 떠나며 인터넷과 휴대폰 서비스를 해지했다. 휴대폰을 해지하고 나니 그동안 얼마나 편하게 살았는지, 휴대폰이 얼마나 고마운 존재인지 절감하게 되었다. 영국에 도착해 휴대폰이 없어 난처한 상황을 여러 번 겪었다. 다음은 그 난처했던 상황 이야기다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
한국을 떠나며 인터넷과 휴대폰 서비스를 해지했다. 휴대폰을 해지하고 나니 그동안 얼마나 편하게 살았는지, 휴대폰이 얼마나 고마운 존재인지 절감하게 되었다. 영국에 도착해 휴대폰이 없어 난처한 상황을 여러 번 겪었다. 다음은 그 난처했던 상황 이야기다.
오각수와 육각수도 되는, 40755 다음으로 큰 삼각수는?
육각수를 구하는 공식을 조금 변형해보면 다음과 같은 결과를 얻을 수 있다.
합과 차도 모두 오각수인 두 오각수 차의 최소값은?
어떤 수가 오각수인지 빠르게 판단할 수 있다면 와 를 계속 늘려가며 와 를 구하고 그 합과 차 역시 오각수인 경우를 찾을 수 있다. 로 놓고 근의 공식을 이용해 에 대한 이차방정식을 풀면 다음과 같은 결과를 얻는다.
최근 영국과 메일을 주고 받다 보니 영국 화폐 단위인 파운드 기호(£)를 입력하는 일이 잦아졌다. 처음에는 Mac OS X에서 제공하는 특수문자 입력 기능을 사용했지만 너무 불편했다. 영국 키보드로는 파운드 기호를 쉽게 입력할 수 있겠다 생각되어 시스템 설정에서 입력 소스를 British로 바꾸니 Shift+3
으로 파운드 기호를 쉽게 입력할 수 있었다.
부분열에 관련된 특이한 성질을 가진 모든 팬디지털 숫자의 합
언듯 보면 복잡해 보이지만 조건만 많을 뿐 아주 단순한 문제다. 문제 32, 문제 41에서 clojure.contrib.combinatorics
의 permutations
를 사용해 팬디지털 수를 만드는 방법을 살펴봤다. 이 문제에서도 0-9 팬디지털 수를 구해 문제에서 설명한 조건을 만족하는 수만 걸러낸 다음 그 합을 구하면 된다.
주어진 텍스트 파일에 들어있는 '삼각단어'의 개수는?
쉬운 문제다. 파일에 들어있는 단어 목록에서 단어값이 삼각수인 삼각단어의 수를 세기만 하면 된다.
자리 팬디지털 소수 중에서 가장 큰 수
두 가지 방법이 떠오른다. 하나는 clojure.contrib.lazy-seqs
의 primes
를 이용하는 방법이다. 가장 큰 팬디지털 수는 987654321이므로 이걸 상한으로 소수를 하나씩 조사해가며 팬디지털 수인지 확인해 가장 큰 수를 구하면 된다. 그러나 이 방법은 987654321보다 작은 수 중 가장 큰 소수에 도달할 때까지 확인을 해야 하므로 답을 빠르게 구하기는 어려워 보인다.
어떤 무리수에서 소수점 번째 자리 숫자 알아내기
이 문제를 푸는 데는 특별히 복잡한 알고리즘이 필요하지 않다. 그냥 문제에서 설명한 대로 소수점 아래 수에 대한 시퀀스를 만들고, 1번째, 10번째, ... , 1,000,000번째 요소를 구해 모두 곱하면 그만이다. Clojure로는 특히 이런 문제를 쉽게 풀 수 있는 것 같다.
가장 많은 직각삼각형이 만들어지는 둘레(≤ 1000)의 길이는?
세 변의 길이가 자연수인 직삼각형을 가장 많이 만들 수 있는 둘레 길이를 찾는 문제다. Pythagorean triple > Generating a triple에 유클리드 공식을 사용해 피타고라스 수를 구하는 방법이 나와있다.
어떤 수에 (1, 2, ... )를 곱해서 이어붙여 얻을 수 있는 가장 큰 1 ~ 9 팬디지털 숫자
(1, 2, ...)를 곱해서 이어붙일 어떤 수는 네 자리 이하의 수여야 한다. n이 1보다 커야 하므로, 어떤 수가 다섯 자리라면 (1, 2)를 곱해 이어붙일 경우 아홉 자리를 넘어버리기 때문이다. 따라서 네 자리 수 중 가장 큰 9999부터 숫자를 줄여가며 답을 찾으면 문제를 쉽게 풀 수 있다.