320x100
문제 : https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ff47/00000000003bf4ed
음수가 아닌 정수형 배열이 주어질 때, 최장 부분산수배열 길이를 구해라. 이때, 부분산수배열의 연속되는 원소의 차이는 서로 같다. ex) [1,3,5], [5,5,5]
배열을 처음부터 탐색하면서 이전 원소 차이를 diff 변수(arr[i-1] - arr[i-2])에 저장해둔다. 그리고 부분산수배열의 길이를 변수 cnt에 저장한다.
탐색중인 원소와 이전 원소의 차이(arr[i] - arr[i-1])가 diff 변수와 같다면 부분산수배열이 될 수 있으므로 cnt+1을해준다.
diff 변수와 다르다면 arr[i-1], arr[i] 부터 다시 부분산수배열이 가능한지 체크해가면서 cnt를 구해야 하므로 cnt = 2로 갱신해주고 위 알고리즘을 다시 진행한다. 이 때, 탐색하고 있는 i가 0이라면 arr[i-1]은 존재하지 않으므로 cnt는 1로 갱신한다. 이를 모든 배열을 탐색할 때까지 반복하고 탐색중에 나오는 cnt중 최대값이 정답이 된다.
시간복잡도는 O(N).
320x100
'알고리즘 문제 > CodeJam' 카테고리의 다른 글
[Kickstart][2020][Round F] 1. ATM Queue (0) | 2020.12.22 |
---|---|
[Kickstart][2020][Round E] 2. High Buildings (0) | 2020.08.28 |
[Kickstart][2020][Round C] 1. Countdown (0) | 2020.05.23 |
[Kickstart][2020][Round B] 3. Robot Path Decoding (0) | 2020.04.25 |
[Kickstart][2020][Round B] 2. Bus Routes (0) | 2020.04.23 |
댓글