http://www.ibm.com/developerworks/kr/library/os-eclipse-clojure/
Find the greatest product of five consecutive digits in the 1000-digit number.>> 1000자리 숫자에서 5개의 연속된 곱중 최대값을 찾아라
Beforehand
필요한 기능들을 알아보자.
1. 1000자리 숫자를 표현하기 힘들다.
- 어차피 필요한 것은 연속된 5개의 숫자의 곱이다.
1000자리 숫자는 문자열로 생각하고, 인덱스 윈도우를 바꿔가며 계산하자.
즉, [0~4], [1~5], [2~6] ... [996~1000] 으로 가리키는 인덱스의 범위를 바꿔가겠단 말.
2. 필요한 함수는?
- 최대값 : max
- 제어문자가 아닌 숫자만을 선별 : filter, Character/isDigit
- 5개씩 구해진 숫자 시퀀스의 곱 : reduce
- 인덱스 윈도우를 하나씩 옮겨가며 5개씩의 시퀀스를 반환 : for
Make Simple
필요한 문법은 거의 다 알았다.
이제 문제를 간단히 생각해보자. 숫자 시퀀스가 1000개가 아니라 10개라고 생각해보자.
여기서 얻을 수 있는 5개의 숫자 시퀀스는 다음과 같다.
01234 12345 23456 34567 45678 56789 67890
시퀀스의 곱의 최대값은?
5 * 6 * 7 * 8 * 9 = 15120
시퀀스에서 5개씩 어떻게 뽑아올까?
이제 이 두 방법을 조합해서 문제를 풀어보자.
Resolve
문제에 제시된 1000개의 숫자를 문자열로 처리한다.
최대값을 구할 것인데, 5개의 연속된 숫자열의 곱에서 구한다.
'Code Snippets > Clojure' 카테고리의 다른 글
[Project Euler] Problem 2 (0) | 2010.10.11 |
---|---|
clojure용 Syntax HighLighting을 위한 js, css (0) | 2010.10.08 |
Clojure Sample - Sequence (0) | 2010.10.08 |
Clojure Sample - Function (0) | 2010.10.08 |
Clojure Sample - Basic (0) | 2010.10.07 |