프로젝트 오일러 회고

프로젝트 오일러의 처음 100문제를 모두 풀어 블로그에 정리했다. 처음 맛보기로 몇 문제 풀어보고는 재미를 붙여 '100번까지 풀어보자' 생각했다. 새로운 문제가 계속 추가되고 있었고 뒤로 갈수록 문제도 어려워졌기 때문에 모든 문제를 풀기는 무리일 것 같았고, 100번 정도까지가 적당해 보였다.

Read more...

Java 람다의 실체

Java에 람다 표현식이 추가된 지 꽤 됐지만, 람다 표현식이 컴파일러를 통해 익명 클래스로 변환되는 편의 문법 정도로 생각하는 경우가 많은 것 같다. 컴파일러가 생성한 클래스 파일을 살펴보고, 람다 표현식이 실제로 어떻게 컴파일 되는지 확인해보려 한다.

Read more...

한국 운전면허 적성검사 연기 신청

몇 달 전 한국 운전면허 적성검사를 받아야 한다는 소식을 동생에게 들었다. 한참을 미루다 인터넷을 검색하며 조금 알아보았더니 나처럼 해외 체류중인 경우는 적성검사를 연기할 수 있는데, 연기신청을 하려면 경찰서나 도로교통공단, 면허시험장을 방문해야 한다는 것이었다. 이런 젠장! 방문할 수 있으면 가서 그냥 적성검사를 받고 말겠다.

Read more...

장난감 프로젝트

Java 프로그래밍을 밥벌이로 삼고 있지만 JDK에 새로 추가된 기능을 공부하고 연습하기를 멈춘지 꽤 된 것 같다. ScalaClojure 같은 다른 언어를 공부하기도 했지만 많이 나아가지 못했다. Java에 새로 추가된 기능을 제대로 이해하지 못한 상태에서 기본적인 사용법만 익혀 하루하루를 버티다 보니 점점 바닥이 드러났다. 회사 일을 할 때는 레커시 코드에서 자잘한 기능을 추가하거나 버그를 수정하는 작업만 하다보니 새로운 것을 배울 기회가 많지 않다.

Read more...

프로젝트 오일러 100

두 개의 파란 공이 뽑힐 확률이 50%인 경우

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

공 전체 개수를 n , 파란 공 개수를 b 라 하면, 상자에서 무작위로 두 개의 공을 꺼냈을 때 두 개가 모두 파란 색일 확률은 다음과 같이 나타낼 수 있다.

%math \begin{aligned} P = \frac{b}{n} \cdot \frac{b-1}{n-1} = \frac{1}{2} \end{aligned}

Read more...

Duplicate lines

예전에 Eclpse를 쓸 때 알게 된 편리한 기능이 있다. 하나는 Move lines up/down 기능으로 Alt+<up> 또는 Alt+<down> 키로 현재 선택 영역 또는 현재 행을 위/아래로 이동하는 기능이고, 다른 하나는 Duplicate lines 기능으로 Cmd+Alt+<down> 키를 누르면 현재 선택 영역 또는 현재 행을 아래로 복사하는 기능이다.

Read more...

프로젝트 오일러 99

밑과 지수 형태로 나타낸 수 중 가장 큰 수 찾기

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

로그 개념을 알면 쉬운 문제다. 큰 수에 \log 를 취하면 작은 수로 바꿀 수 있다. 예를 들어 10^{100} 은 1 뒤에 0이 백개나 붙는 큰 수지만 \log_{10} 10^{100} 은 그냥 100이다. 그러나 \log 는 단조증가 함수기 때문에 어떤 수 x y 보다 크다면 \log x \log y 보다 크다.

Read more...

프로젝트 오일러 98

제곱수를 나타내는 애너그램 쌍 찾기

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

단어 수는 2천 개도 안 되지만 각 단어의 알파벳을 임의의 수로 치환하는 경우의 수를 생각하면 엄청나게 많은 계산이 필요하다. 알파벳을 임의의 수로 치환하는 대신 제곱수를 미리 구해놓고 알파벳을 치환할 때 제곱수를 이용해 치환한다면 계산 범위를 크게 줄일 수 있다.

Read more...

프로젝트 오일러 97

메르센 수가 아닌 소수 28433×2^{7830457}+1 의 마지막 10자리는?

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

2^{7830457} 은 2백만 자리가 넘는 어마어마하게 큰 수지만, Java의 BigInteger를 이용하면 계산하지 못 할 것도 없다. 그러나 이 큰 수의 모든 자릿수가 필요한 게 아니라 마지막 10자리만 필요하므로 modPow를 쓰면 조금 쉽게 계산할 수 있을 것 같다.

Read more...

Last, this, next Friday

영어로 대화할 때 'last Friday', 'this Friday', 'next Friday'와 같은 표현을 자주 접한다. 언젠가 'last Monday'와 'this Monday'가 같은 날이 될 수 있다는 얘기를 들었던 생각이 났다. 그땐 '어떻게 그럴 수가 있지?' 하면서도 깊게 생각하지 않고 그냥 넘어갔던 것 같다. 생각난 김에 정확히 알아두는 게 좋겠다 싶어 내 옆 자리에 앉아 있는 영국인 브래드에게 물어봤다.

Read more...