[백준] 33489. 수열의 점수

newbieski·2025년 2월 28일
0

백준

목록 보기
239/244

https://www.acmicpc.net/problem/33489

문제 요약

  • 무한한 길이의 수열 A를 정의함 : x,y로 시작하고 (앞항 - 뒤항) 을 계속 반복
  • 수열에서 최초로 0이하가 등장할때까지의 길이를 최대로 하는 x,y를 선택
  • 1<=x<=X, 1<=y<=Y (3*10^5)

접근법(실패)

  • 수식을 전개하면
    • x > 0
    • y > 0
    • x-y > 0
    • 2y-x > 0
    • 2x-3y > 0
    • ....
  • 부등호가 나오고, 기울기가(셋째항부터) 1, 1/2, 2/3, 3/5, 5/8, ..... 피보나치를 이용한 기울기가 나옴
  • 두 직선 사이의 영역의 숫자들일텐데, 직선을 최대한 촘촘히 했을때 얻을 수 있는 정수 쌍을 구하자로 접근했음
  • x가 가장 클때 유리할 것이라고 판단했는데 실패함

실패이유 찾기

  • 적당히 작은 값에 대해서 완전탐색으로 찾아봄
  • (X,Y)의 모든 경우에 대해서 수열을 전개해서 가장 큰 값이 나오는 경우를 찾는 방식으로 완전 탐색
  • 그런데 수열을 전개하다가 보니 역피보나치라는 것을 깨달음
  • 값이 줄어드는 것처럼 보이는데 반대로 하면 피보나치 수열임

접근법(성공)

  • 어떤 숫자로 시작하든 마지막에는 (1,1), (1,2), (2,1) 중 하나로 끝남
    • (0,x) 는 당연히 아니고
    • (3,2) 는 (2,1)의 여지가 있음
  • 반대로 (1,1), (1,2), (2,1)로 시작해서 (Y,X)를 만족하는 가장 긴 수열을 찾아봄
  • 왜 (Y,X)이냐면, 피보나치의 역으로 전개했을때가 문제에서 주어진 수열이기때문임
  • 피보나치가 빨리 커지기때문에 3*10^5까지 만드는데 수행횟수가 크지 않음 => 탐색 가능

왜 실패했을까

  • 아무래도 정수를 찾아야하기 때문에 오히려 중간 어딘가가 영역에 잘 맞을수도 있는 것 같다.
profile
newbieski

0개의 댓글

관련 채용 정보