from collections import Counter
def solution(a):
elements = Counter(a).most_common()
answer = 0
for k, v in elements:
if v <= answer : break
star = 0
idx = 0
while idx < len(a)-1:
if k not in a[idx:idx+2] or (a[idx] == a[idx+1]):
idx += 1
continue
star += 1
idx += 2
answer = max(star, answer)
return answer * 2
스타수열
- x의 길이를 2n이라 할 때, 다음과 같은 n개의 집합
{x[0], x[1]}, {x[2], x[3]}, ..., {x[2n-2], x[2n-1]}
의 교집합의 원소의 개수가 1 이상입니다.x[0] != x[1], x[2] != x[3], ..., x[2n-2] != x[2n-1]
입니다.
스타수열의 교집합의 원소는 1개 이상이기 때문에, a
원소중 하나를 뽑아 그 숫자를 기준으로 스타수열들을 만들어나가면 된다는 사실을 파악할 수 있다.
스타수열의 공통원소를 k
라고 할 때, a
에서 2개의 연속된 원소가 k
-스타수열이 되지않는 경우는 바로
k not in a[i:i+2]
a[i] == a[i+1]
이 두가지 경우를 제외한 나머지경우는 k
-스타수열이 된다.
a
의 원소들을 빈도순 기준으로 정렬idx
0 ~ len(a)-1
까지a[idx], a[idx+1]
이k
스타수열인지 확인
- 스타수열이라면 2칸 옮겨서 검사
- 스타수열이 아니라면 한칸옯겨서 검사
from collections import Counter
def solution(a):
elements = Counter(a).most_common() # 원소갯수 많은 순으로 정렬
answer = 0
for k, v in elements:
if v <= answer: break # 원소갯수가 answer보다 같거나 작으면 검사할 필요없음
star = 0 #스타수열 갯수
idx = 0
while idx < len(a)-1:
if k not in a[idx:idx+2] or (a[idx] == a[idx+1]): # k-스타수열이 아닌지 검사
idx += 1
continue
star += 1
idx += 2
answer = max(star, answer)
return answer * 2