등차수열

면접 대비

시간 제한5초메모리 제한512 MB

요약
서로 다른 정수로 이루어진 집합에서 등차수열을 이루는 부분집합의 최대 길이를 구합니다.
난이도

보통10점 중 6점

유형
배열, 해시맵, 동적 계획법
정답자
아직 제출이 없습니다

문제

등차수열은 연속한 두 항의 차 ai+1−aia_{i+1} - a_i가 일정한 수열 a1,a2,…,aka_1, a_2, \dots, a_k이다 (1≤i≤k−11 \le i \le k-1). 예를 들어 수열 5, 8, 11, 14, 17은 공차가 3인 길이 5의 등차수열이다.

이 문제에서는 주어진 수 집합에서 몇 개의 수를 골라 만들 수 있는 가장 긴 등차수열의 길이를 구해야 한다. 예를 들어 주어진 집합이 {0,1,3,5,6,9}\{0, 1, 3, 5, 6, 9\}라면 공차가 3인 0, 3, 6, 9나 공차가 −4-4인 9, 5, 1 같은 등차수열을 만들 수 있다. 이때 0, 3, 6, 9와 9, 6, 3, 0이 가장 긴 등차수열이다.

입력

입력은 다음과 같은 형식의 단일 테스트 케이스로 이루어진다.

n
v1 v2 ··· vn

nn은 집합의 원소 개수이며 2≤n≤50002 \le n \le 5000을 만족하는 정수이다. 각 viv_i (1≤i≤n1 \le i \le n)는 집합의 원소이며 0≤vi≤1090 \le v_i \le 10^9을 만족하는 정수이다. viv_i는 모두 다르다. 즉 i≠ji \ne j이면 vi≠vjv_i \ne v_j이다.

출력

주어진 수 집합에서 몇 개의 수를 골라 만들 수 있는 가장 긴 등차수열의 길이를 출력한다.

예제3

  1. 예제 1

    입력
    6
    0 1 3 5 6 9
    
    예상 출력
    4
    
  2. 예제 2

    입력
    7
    1 4 7 3 2 6 5
    
    예상 출력
    7
    
  3. 예제 3

    입력
    5
    1 2 4 8 16
    
    예상 출력
    2