프로젝트 오일러 회고
프로젝트 오일러의 처음 100문제를 모두 풀어 블로그에 정리했다. 처음 맛보기로 몇 문제 풀어보고는 재미를 붙여 '100번까지 풀어보자' 생각했다. 새로운 문제가 계속 추가되고 있었고 뒤로 갈수록 문제도 어려워졌기 때문에 모든 문제를 풀기는 무리일 것 같았고, 100번 정도까지가 적당해 보였다.
내 이 세상 도처에서 쉴 곳을 찾아보았으나, 마침내 찾아낸, 컴퓨터가 있는 구석방보다 나은 곳은 없더라.
프로젝트 오일러의 처음 100문제를 모두 풀어 블로그에 정리했다. 처음 맛보기로 몇 문제 풀어보고는 재미를 붙여 '100번까지 풀어보자' 생각했다. 새로운 문제가 계속 추가되고 있었고 뒤로 갈수록 문제도 어려워졌기 때문에 모든 문제를 풀기는 무리일 것 같았고, 100번 정도까지가 적당해 보였다.
Java에 람다 표현식이 추가된 지 꽤 됐지만, 람다 표현식이 컴파일러를 통해 익명 클래스로 변환되는 편의 문법 정도로 생각하는 경우가 많은 것 같다. 컴파일러가 생성한 클래스 파일을 살펴보고, 람다 표현식이 실제로 어떻게 컴파일 되는지 확인해보려 한다.
몇 달 전 한국 운전면허 적성검사를 받아야 한다는 소식을 동생에게 들었다. 한참을 미루다 인터넷을 검색하며 조금 알아보았더니 나처럼 해외 체류중인 경우는 적성검사를 연기할 수 있는데, 연기신청을 하려면 경찰서나 도로교통공단, 면허시험장을 방문해야 한다는 것이었다. 이런 젠장! 방문할 수 있으면 가서 그냥 적성검사를 받고 말겠다.
Java 프로그래밍을 밥벌이로 삼고 있지만 JDK에 새로 추가된 기능을 공부하고 연습하기를 멈춘지 꽤 된 것 같다. Scala나 Clojure 같은 다른 언어를 공부하기도 했지만 많이 나아가지 못했다. Java에 새로 추가된 기능을 제대로 이해하지 못한 상태에서 기본적인 사용법만 익혀 하루하루를 버티다 보니 점점 바닥이 드러났다. 회사 일을 할 때는 레커시 코드에서 자잘한 기능을 추가하거나 버그를 수정하는 작업만 하다보니 새로운 것을 배울 기회가 많지 않다.
두 개의 파란 공이 뽑힐 확률이 50%인 경우
공 전체 개수를 , 파란 공 개수를 라 하면, 상자에서 무작위로 두 개의 공을 꺼냈을 때 두 개가 모두 파란 색일 확률은 다음과 같이 나타낼 수 있다.
예전에 Eclpse를 쓸 때 알게 된 편리한 기능이 있다. 하나는 Move lines up/down 기능으로 Alt+<up>
또는 Alt+<down>
키로 현재 선택 영역 또는 현재 행을 위/아래로 이동하는 기능이고, 다른 하나는 Duplicate lines 기능으로 Cmd+Alt+<down>
키를 누르면 현재 선택 영역 또는 현재 행을 아래로 복사하는 기능이다.
밑과 지수 형태로 나타낸 수 중 가장 큰 수 찾기
로그 개념을 알면 쉬운 문제다. 큰 수에 를 취하면 작은 수로 바꿀 수 있다. 예를 들어 은 1 뒤에 0이 백개나 붙는 큰 수지만 은 그냥 100이다. 그러나 는 단조증가 함수기 때문에 어떤 수 가 보다 크다면 도 보다 크다.
제곱수를 나타내는 애너그램 쌍 찾기
단어 수는 2천 개도 안 되지만 각 단어의 알파벳을 임의의 수로 치환하는 경우의 수를 생각하면 엄청나게 많은 계산이 필요하다. 알파벳을 임의의 수로 치환하는 대신 제곱수를 미리 구해놓고 알파벳을 치환할 때 제곱수를 이용해 치환한다면 계산 범위를 크게 줄일 수 있다.
메르센 수가 아닌 소수 의 마지막 10자리는?
은 2백만 자리가 넘는 어마어마하게 큰 수지만, Java의 BigInteger
를 이용하면 계산하지 못 할 것도 없다. 그러나 이 큰 수의 모든 자릿수가 필요한 게 아니라 마지막 10자리만 필요하므로 modPow
를 쓰면 조금 쉽게 계산할 수 있을 것 같다.
영어로 대화할 때 'last Friday', 'this Friday', 'next Friday'와 같은 표현을 자주 접한다. 언젠가 'last Monday'와 'this Monday'가 같은 날이 될 수 있다는 얘기를 들었던 생각이 났다. 그땐 '어떻게 그럴 수가 있지?' 하면서도 깊게 생각하지 않고 그냥 넘어갔던 것 같다. 생각난 김에 정확히 알아두는 게 좋겠다 싶어 내 옆 자리에 앉아 있는 영국인 브래드에게 물어봤다.