다음과 같은 것들을 정의합니다.
1차원 정수 배열 a가 매개변수로 주어집니다. a의 모든 부분 수열 중에서 가장 길이가 긴 스타 수열의 길이를 return 하도록 solution 함수를 완성해주세요. 이때, a의 모든 부분 수열 중에서 스타 수열이 없다면, 0을 return 해주세요.
a | result |
---|---|
[0] | 0 |
[5,2,3,3,5,3] | 4 |
[0,3,3,0,7,2,0,2,2,0] | 8 |
# 코드
from collections import Counter
def solution(a):
answer = 0
n = len(a)
# 각 원소의 카운트 확인
elements = Counter(a)
# 원소의 수가 2개인 경우부터 스타 수열이 가능하므로
# 1개인 경우는 0 반환
if n <= 1:
return answer
# 원소의 수가 가장 많은 경우부터 공통 원소 최고 개수 확인
for k, v in sorted(elements.items(), key=lambda x : -x[1]):
# 원소의 개수가 공통 원소의 개수보다 작을 경우 종료
if v <= answer:
break
# 공통 원소 개수
common_cnt = 0
# 인덱스
idx = 0
while idx < n - 1:
# a[idx], a[idx+1]에 공통 원소가 없는 경우
# a[idx] == a[idx+1]인 경우
# idx + 1
if (a[idx] != k and a [idx+1] != k) or (a[idx] == a[idx+1]):
idx += 1
continue
# 가능한 경우 다음 인덱스 확인
common_cnt += 1
idx += 2
# 공통 원소 최대값 선택
answer = max(common_cnt, answer)
# 공통 원소 개수이므로
# 전체 길이를 구하기 위해 *2 이후 반환
return answer * 2