Posts

if (cond == true) return true

회사에서 코드 리뷰를 할 때 다음과 같은 패턴의 코드가 자주 눈에 띈다.

if (condition == true) {
  return true;
} else {
  return false;
}

Read more...

에디터 입력기 만들기

contenteditable을 사용하지 않고 에디터를 개발하기로 했다면 브라우저에서 키 입력 이벤트를 받아 처리할 IME(Input Method Editor)를 만들어야 한다. 텍스트 필드나 div에 텍스트를 입력할 수 있게 한 다음 여기서 키 이벤트를 받아 처리하는 방식으로 구현한다. div에 텍스트를 입력하려면 contenteditable을 써야 하지만, 에디터 창에 contenteditable을 써서 편집하는 것과는 다르다. 개발할 때는 입력을 제대로 처리하는 지 확인하기 쉽게 IME를 표시하기도 하지만, 나중에는 IME를 보이지 않게 처리해 에디터 화면에 텍스트가 직접 입력되는 것처럼 보이게 한다.

Read more...

프로젝트 오일러 25

피보나치 수열에서 처음으로 1000자리가 되는 항은 몇 번째?

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

피보나치 수열을 구하는 방법은 프로젝트 오일러 2번 풀이에서 설명했다. 2번에서는 4백만 이하의 항을 다루었지만 이 문제에서는 1,000자리가 되는 항을 구해야 하므로 피보나치 수열을 계산할 때 + 대신 자릿수에 관계 없이 계산할 수 있는 +'를 사용해야 한다.

Read more...

순열 구하기

프로젝트 오일러 24번clojure.math.combinatorics에 있는 nth-permutation을 이용해 문제를 너무 쉽게 풀었다. 그런데 순열을 직접 구하려면 어떻게 해야 할까?

Read more...

프로젝트 오일러 24

0, 1, 2, 3, 4, 5, 6, 7, 8, 9로 만들 수 있는 1,000,000번째 사전식 순열은?

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

clojure.math.combinatoricsnth-permutation 함수를 이용하면 바로 답을 구할 수 있다. 다만 인덱스가 0부터 시작한다는 점에 주의해야 한다.

Read more...

정수 자릿수 구하기

어떤 정수가 몇 자리 수인지 어떻게 판단할 수 있을까? 몇 가지 방법이 떠오른다. 사람에 따라 다르겠지만 내게 가장 먼저 떠오른 방법은 로그 함수를 사용하는 것이었다. 정수를 문자열로 바꾼 다음 문자열의 길이를 구하는 방법도 생각할 수 있다. 10으로 몇 번 나눌 수 있는지 확인하는 방법도 있다.

Read more...

블로그에 Progress Bar 추가하기

이상한 모임 사이트에서 글을 읽을 때 상단에 프로그레스 바(progress bar)가 표시되는 것을 발견했다. 스크롤해서 글을 읽어감에 따라 글을 얼마나 읽었는지, 얼마나 남았는지를 쉽게 알 수 있어 매우 마음에 들었다. 내 블로그에도 이걸 적용하면 좋겠다는 생각이 들어 툭탁툭탁 만들어 봤다.

Read more...

프로젝트 오일러 23

두 초과수의 합으로 나타낼 수 없는 모든 양의 정수의 합은?

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

초과수인지 판단하려면 진약수의 합을 알아야 한다. 문제 21에서 구현한 진약수의 합을 구하는 함수를 이용하면 다음과 같이 주어진 수가 초과수인지 판단하는 함수를 간단히 구현할 수 있다.

Read more...

에디터 문서 모델

복잡한 소프트웨어를 만들 때 여러 번의 갈림길에 서게 된다. 나중에는 쉽게 알 수 있는 사실이라도 선택할 당시에는 명확하지 않아 어느 쪽이 옳은지 판단하기가 쉽지 않은 경우가 많다. 에디터에서 문서 모델을 설계할 때도 마찬가지다. 문서 모델은 편집하는 문서를 어떤 구조로 저장하고 조작할지를 결정하는 에디터의 핵심 데이터 구조다. 문서 모델의 구조에 따라 이후 개발할 편집 기능의 구현 방향이 갈릴 것이다. 문서 모델이 잘못되어 있다면 기능 구현은 매우 피곤하고 힘든 과정이 될 수 있다.

Read more...

프로젝트 오일러 22

영문 이름 점수 합계 구하기

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

수학적 사고나 특별한 기교가 필요한 문제는 아니다. 그냥 문제에서 설명한 대로 처리하면 답을 얻을 수 있다. names.txt 파일을 열어보면 다음과 같이 이름이 따옴표로 묶여 있고 각 이름 사이에는 쉼표가 있다.

Read more...