문제 : https://codingcompetitions.withgoogle.com/kickstart/round/000000000019ff47/00000000003bf4ed
Kick Start - Google’s Coding Competitions
Hone your coding skills with algorithmic puzzles meant for students and those new to coding competitions. Participate in one round or join them all.
codingcompetitions.withgoogle.com
음수가 아닌 정수형 배열이 주어질 때, 최장 부분산수배열 길이를 구해라. 이때, 부분산수배열의 연속되는 원소의 차이는 서로 같다. 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).
'알고리즘 문제 > 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 |
댓글