이번 문제는 피보나치수열의 변형 문제였다. 패턴을 찾기 위해 미지수 a와 b를 대입해보았다.
미지수가 2개이기 때문에 고민을 조금 하였고, 구하고자 하는 k를 구성하는 a의 갯수와 b의 갯수를 이용하여 전체 수를 대입해보기로 하였다.
k=ac*a+bc*b
이다. a에 1부터 100,000까지 대입해보면서 b의 값을 구하였다.b=(k-ac*a)/bc
가 되고 a에 임의의 수가 들어가게 된다면 b를 제외한 모든 수가 주어지는 셈이다.(k-ac*a)%b=0
이라는 조건문을 넣어 이 조건에 만족하면 값을 출력하고 프로그램을 종료시킨다.처음에 문제에 접근할 때에는 k=ac*a+bc*b
식을 정리하지 않고 사용하여 이중 for문을 사용하였고 이 때문에 시간초과가 발생하였다. k=ac*a+bc*b
식을 (k-ac*a)%b=0
로 정리하고 a에만 값을 하나씩 대입하며 적합한 b를 찾아내는 방식으로 시간을 단축하였다.
d,k=map(int, input().split())
ac=1
bc=0
for i in range(d-1):
ac, bc=bc, ac+bc
for a in range(1, 1000000):
if (k-(ac*a))%bc==0:
print(a, (k-(ac*a))//bc, sep="\n")
break