Posts

장난감 프로젝트

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...

프로젝트 오일러 96

스도쿠 퍼즐 풀기

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

예전에 어디선가 Scala 코드 15줄로 스도쿠 퍼즐을 풀 수 있다는 글을 본 생각이 났다. 어떤 놀라운 알고리즘이 있나 봤는데 알고보니 CSP(Constraint Satisfaction Problem) 라이브러리를 사용한 것이었다. Clojure에서는 core.logic을 사용해 Scala 풀이와 비슷하게 문제를 풀 수 있다.

Read more...

프로젝트 오일러 95

1백만 이하의 숫자로 이루어진 친화고리

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

주어진 정수의 진약수 합을 구하는 맵이 있으면 문제를 쉽게 풀 수 있을 것 같다. 문제 21에서 진약수의 합을 구하는 몇 가지 방법을 살펴보았지만 이 문제를 푸는 데 활용할 만큼 빠르지 않다. 그냥 다음과 같이 루프를 돌면서 맵을 만드는 게 나을 것 같다.

Read more...

블로그 Hugo 이전 후기

지난 4년간 블로그를 생성할 때 Hexo를 사용했는데, 최근 Hugo로 이전했다. StaticGen에서는 정적 사이트 생성기를 깃헙 스타 개수나 트위터 팔로우어 수로 정렬해 볼 수 있다. 4년 전 어떤 프로그램을 쓸까 고민하던 때만 해도 Hexo가 훨씬 인기가 많았던 것 같은데, 지금은 Hugo가 Hexo를 제친 것 같다.

Read more...