만약 이 문제를 전체 moo 수열을 직접 만들어서 풀려 하면 시간 초과 및 메모리 초과가 뜰 것이다. 재귀 함수를 사용하되, 최대한 light하게 만들어 진행하는 것이 최우선이다.
따라서 직접 수열을 만들지 않더라도 주어진 n의 글자를 알아야 한다.
import sys
input = sys.stdin.readline
def find_m(k, leng, n):
if k == 0: # 초기값
if n == 0:
return 'm'
else:
return 'o'
len_before = (leng-k-3)//2
if 0 <= n < len_before:
return find_m(k-1, len_before, n)
elif n == len_before:
return 'm'
elif len_before < n < len_before + (3+k):
return 'o'
elif n >= len_before + (3+k):
return find_m(k-1, len_before, n-(3+k)-len_before)
if __name__ == '__main__':
n = int(input())
# n이 속해 있는 S(k)의 k값을 구하라.
k = 0
leng = 3
while leng < n:
k += 1
leng = leng*2 + 3 + k
print(find_m(k, leng, n-1))
import sys
input = sys.stdin.readline
n = int(input())
def moo(n):
if n == 0:
return 'moo'
return moo(n-1)+ 'moo' + 'o'*n + moo(n-1)
def len_of_moo(n):
if n == 0:
return 3
return len_of_moo(n-1) * 2 + n + 3
k = 0
for i in range(1, n):
if n < len_of_moo(i):
k = i
break
print(moo(k)[n-1])