Posts

프로젝트 오일러 78

동전을 여러 더미로 나누는 경우의 수 세기

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

동전을 여러 더미로 나누는 방법의 수는 정수를 덧셈으로 표시할 수 있는 방법의 수와 같다. 위키백과를 찾아보면 다음과 같이 공식이 나와 있다.

%math \begin{aligned} p(n) &= \sum_{k \neq 0} (-1)^{k-1}p(n - g_k) \newline g_k &= \frac{k(3k-1)}{2} \end{aligned}

n 을 증가시키면서 p(n) 을 구해 1백만으로 나누어 떨어지는지 확인하는 방법으로 답을 찾을 수 있다. p(n) 을 구하는 데 필요한 g_k 는 다음과 같이 쉽게 구현할 수 있다.

Read more...

Emacs를 이용한 단순 반복 작업

며칠 전 아주 지겨워 보이는 작업을 하게 되었다. 엑셀 파일에 있는 정보를 참고해 설정 파일을 수정하는 일이었다. 설정 파일은 국가별 설정 정보를 담고 있는데 각 국가별 설정에 새로운 필드를 추가해야 하고 필드의 값은 엑셀 파일을 참조해 지정해야 했다.

Read more...

On Call

아마존에 오기 전 아마존이 다닐만한 회사인지 조사하는 데, 온콜에 대한 불만을 토로하는 글이 많이 보였다. 온콜이 뭐길래 그러지? 사전을 찾아보니 다음과 같이 설명되어 있다. 우리 말로 하면 '당직'과 비슷한 개념일 것 같다.

Read more...

프로젝트 오일러 77

소수의 합으로 나타내는 방법이 5000가지가 넘는 최초의 숫자는?

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

이 문제도 바로 전에 풀었던 문제 76과 마찬가지로 문제 31비슷하다. 여기서는 동전의 종류가 소수라고 생각하면 된다. 따라서 인덱스를 넣으면 소수가 나오는 맵을 만들어 두면 문제 풀이에 활용할 수 있다. 소수는 100개 정도 준비하면 충분할 것 같다.

Read more...

프로젝트 오일러 76

숫자 100을 두 개 이상의 자연수의 합으로 나타내는 방법은 모두 몇 가지?

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

이 문제는 영국 화폐 액면가를 조합하는 수를 계산했던 문제 31과 비슷하다. 문제 31에서는 동전의 종류가 여덟가지 였지만, 이 문제에서는 동전의 종류가 1, 2, ..., 99까지 99가지가 있다고 생각할 수 있다.

Read more...

설득

동료와 리팩터링하다 다음과 같은 코드를 만났다.

private Map<String, Integer> getCountryCodeCountMap(String customerId) {
  List<String> countries = getCountryList(customerId);

  Map<String, Integer> countryCodeMap = new HashMap<>();
  for (String cc : countries) {
    if (StringUtils.isNotBlank(cc)) {
      countryCodeMap.put(cc, countryCodeMap.getOrDefault(cc, 0) + 1);
    }
  }
  return countryCodeMap;
}

Read more...

프로젝트 오일러 75

직각삼각형을 만들어내는 방법이 한 가지 뿐인 경우 세기

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

합이 1,500,000 이하인 피타고라스 수(Pythagorean Triplet)의 시퀀스를 생성한 다음, 합으로 group-by 해서 값(피타고라스 수 목록)의 길이가 1 인 키의 개수를 세면 된다. 피타고라스 수를 구하는 방법은 문제 39에서 설명했다.

Read more...

프로젝트 오일러 74

자릿수의 계승값을 더해갈 때, 반복이 일어나기 전의 단계가 60번인 경우 찾기

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

각 자릿수의 계승값을 더하는 함수는 다음과 같이 간단히 작성할 수 있다.

(defn- fact-sum [n]
  (->> (digits n)
       (map factorial)
       (apply +)))

Read more...

영국 인터넷 뱅킹

한국의 인터넷 뱅킹이 개떡 같은 것은 더 말할 필요도 없다. 영국에서는 별도 보안 프로그램 설치 없이 인터넷 브라우저만으로 쾌적하게 은행 업무를 볼 수 있다. 아마 한국을 제외한 다른 나라도 마찬가지일 것 같다. 영국 은행에서 보안 프로그램 없이 어떻게 안전한 뱅킹 서비스를 제공하는지 살펴보자. 영국의 모든 은행에 계좌를 만들어 인터넷 뱅킹을 해본 것은 아니고, 내 주 거래 은행의 인터넷 뱅킹 경험을 바탕으로 설명하는 것임에 유의하기 바란다.

Read more...

가장 뿌듯했던 순간

그 여정이 바로 보상이다.
- 스티브 잡스

초등학교 때 사촌 동생 집에서 Apple II 컴퓨터를 처음 본 순간 컴퓨터 세계로 빠져들었다. 그러나 사촌 동생 집은 멀어서 매일 갈 수가 없었다. 다행히 친한 친구 집에서 SPC1000 이란 컴퓨터가 있었다. 나는 매일 친구 집에 놀러가서 친구와 함께 컴퓨터를 가지고 놀았다. 친구가 귀찮에 생각했을 지도 모르겠다. 나중에 나도 부모님을 졸라 컴퓨터를 장만했다.

Read more...