프로젝트 오일러 93
숫자 4개와 사칙연산을 써서 가장 길게 이어지는 숫자 만들기
숫자 네 개에 사칙연산자를 세 개 사용할 수 있으므로, 각 숫자를 A, B, C, D라 하고 사칙연산자를 Op1
, Op2
, Op3
라 하면, 다음과 같은 조합을 생각할 수 있다. 모든 연산은 괄호로 둘러싸 연산자 우선순위를 고려하지 않게 하면 생각하기가 조금 쉬워진다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
정수 둘레와 정수 넓이를 갖는 거의 정삼각형 찾기
다음 그림과 같이 빗변을 , 밑변을 라 하면, 인 경우가 문제에서 말하는 거의 정삼각형이라 할 수 있다. 삼각형의 높이를 라 하면 피타고라스 정리에 의해 다음 관계가 성립한다.
숫자 4개와 사칙연산을 써서 가장 길게 이어지는 숫자 만들기
숫자 네 개에 사칙연산자를 세 개 사용할 수 있으므로, 각 숫자를 A, B, C, D라 하고 사칙연산자를 Op1
, Op2
, Op3
라 하면, 다음과 같은 조합을 생각할 수 있다. 모든 연산은 괄호로 둘러싸 연산자 우선순위를 고려하지 않게 하면 생각하기가 조금 쉬워진다.
일을 미루는 것은 내 오랜 습관이다. 이번 소득신고 사건 역시 내 오랜 습관의 연장선에 있다. 영국의 과세연도는 매년 4월 6일부터 그 다음해 4월 5일까지다. 온라인 소득신고 마감일은 해당 과세 연도의 다음해 1월 말이다. 종합소득세 신고를 5월 한 달 동안 마쳐야 하는 한국에 비하면 신고 기간이 상당히 여유있게 주어졌다 할 수 있다.
자릿수를 제곱해서 더해가는 수열의 신기한 성질
일단 무식한 방법으로 풀어보자. 1부터 1천만까지 숫자를 대입하면서 자릿수를 제곱해 더한 수가 89에 도달하는지 확인하는 방법이다. 자릿수를 제곱해 더한 수를 구하는 함수는 다음과 같이 간단히 작성할 수 있다.
영국에 와 팀에 합류했을 때 영어로 의사소통하는 것에 어려움을 느꼈다. 특히 영국 사람들이 하는 말을 알아 듣기 힘들었다. 팀 동료가 내 어려움을 알아채고는 회사에서 지원 방법이 있는지 알아보겠다고 했다. 그리고 매니저가 영어 회화 강좌를 들을 수 있게 해 주었다.
한동안 바둑을 두지 않다가 최근 다시 바둑을 두기 시작했다. Online-Go란 사이트를 알게 된 다음부터다. 한국의 바둑 사이트와 달리 구글 아이디로 계정을 만들 수 있고, 별도 프로그램 설치 없이 브라우저에서 바둑을 둘 수 있다. 편리한 만큼 내게는 독이다.
사분면 안의 직각삼각형 개수 세기
1사분면 에서 P의 가능한 위치는 모두 이고 Q의 가능한 위치도 이다. 무차별 대입법으로 문제를 푼다면 번의 루프를 돌면서 직각인지 확인해야 하므로 빠른 시간에 답을 구하지 못한다. 이 방법으로 문제를 풀면 내 환경에서는 답을 구하는 데 7초 이상 걸린다.
정육면체 두 개로 제곱수 만들기
100 미만의 제곱수는 아홉 가지 뿐이고, 숫자 10개 중 6개를 고르는 경우의 수도 210()으로 비교적 작으므로, 모든 조합을 구해 계산해 보는 무식한 방법을 적용해도 문제를 풀 수 있을 것 같다.
로마숫자 최적화하기
먼저 다음과 같이 텍스트 파일을 읽어 시퀀스로 만들어둔다.
(ns p089
(:require [clojure.string :as str]))
(def romans (str/split (slurp "data/roman.txt") #"\r\n"))
일정한 개수의 숫자들을 더해도 곱해도 같은 값이 되는 경우 조사하기
문제 83과 더불어 내게 가장 어려운 문제 중 하나였다. 안타깝지만 이 문제는 내 두뇌 용량을 넘는 문제여서 풀이를 보고도 이해할 수가 없었다. 아래 코드는 다른 블로그에서 찾은 Python 풀이를 Clojure로 옮긴 것에 불과하다.