Problem : Moo 게임
유형 : 분할 정복
문제 해석
Moo 수열
에서N
번째 글자를 구하라.
문제 재해석
- N이
10억
이다. - 단순하게 나이브하게 구현해서는 답을 도출 해낼 수 없다.
S(N)
은S(N-1) + M + O x (n + 2) + S(N-1)
으로 이루어진다.
해결 전략
S(N)
은 재귀적으로 반복 되어 진다는 것을 알 수 있다.- 먼저 10억 이하가 될 수 있는 모든
S(N)
의 길이를 구한다. N
이 속하는S(N)
의 길이를 찾은 뒤,S(N-1) 구간
에 속하는지,Moo.... 구간
에 속하는지를 구분한다.
S(N-1) 구간
에 속한다면, 재귀적으로 계속 찾아나간다.
설계, 구현
기저사례
의 경우는,3보다 작은 경우
다.- 3보다 클경우, 길이를 저장한
MooLen
을 통해 어느S(M)
에 속하는지 찾는다. Moooo 구간
에 속한 경우, 첫번째만m
이고 나머지는o
로 처리 해준다.- 그 뒤의 구간에 속한다면,
S(M-1) 구간
에서 다시 찾아나간다.
코드
1 |
|
피드백
- 분할정복 문제는 역시 훈련이 더 필요해 보인다.
- 구간별로 나누어서 계산을 할 수 있다면 분할정복 솔루션을 생각해보자.