Posts

프로젝트 오일러 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...

프로젝트 오일러 73

분모가 12,000 이하일 때 1/3과 1/2 사이에 위치한 기약 진분수의 개수

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

무차별 대입법

분모가 12,000 이하인 경우만 조사하면 되므로 분자와 분모에 12,000 이하의 수를 대입해가며 분수를 만들어 1/3과 1/2 사이의 기약 진부수를 세는 방법으로 답을 구할 수 있을 것 같다. 분모는 3부터 12,000까지, 분자는 분모/3 ~ 분모/2 사이의 정수를 대입해보면 된다.

Read more...

프로젝트 오일러 72

분모가 1백만 이하인 기약 진분수의 개수

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

분모가 d 인 경우 기약 진분수의 개수는 d 와 서로 소인 정수의 개수와 같다. 이는 Euler’s totient function의 정의와 동일하다. 따라서 분모가 1백만 이하인 기약 진분수의 개수를 S 라 하면 S 는 다음과 같이 구할 수 있다.

Read more...

프로젝트 오일러 71

기약 진분수를 커지는 순으로 늘어놓기

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

분모가 n 보다 작거나 같은 0과 1 사이의 기약 진분수의 수열을 Farey sequence라 한다. 이 수열에서 \frac{a}{b} \frac{c}{d} 가 이웃이고 \frac{a}{b} < \frac{c}{d} 면, 두 수의 차는 \frac{a}{b} - \frac{c}{d} = \frac{1}{bd} 가 되어야 한다.

Read more...

Java에서 배열 합치기

옆 자리 동료가 Java에서 배열을 합치는 간단한 방법이 있는지 질문했다. 열 개 정도의 배열을 하나로 합치고 싶다는 것이었다. 당장 떠오른 방법은 System.arraycopy를 사용하는 것이었지만 이걸 몰라서 물어보지는 않았을 것이다. System.arraycopy를 사용하면 효율적이긴 하겠지만 코드는 별로 예쁘지 않을 것이다. 혹시 이미 이 기능을 구현한 라이브러리가 있나 확인했지만 찾을 수 없었다.

Read more...