프로그래머스

프로그래머스 스타수열 (python)

콩순이냉장고 2023. 12. 7. 18:03

문제 URL : https://school.programmers.co.kr/learn/courses/30/lessons/70130

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 접근법 : 

부분 수열이면서 2개씩 묶어서 반드시 2개로 묶은것은 공통된숫자 1개로 교집합이 성립해야 합니다.

처음엔 공통된 숫자가 많을걸로 접근해서 투포인터 개념으로 풀었는데

테스트케이스가 많은 케이스들만 맞고 적은 케이스들은 틀리더군요

 

배열안에있는 모든 숫자의 대상이되니 최대값이 보다 그이하의 개수를 가질경우 조사할 필요가 없으니

걸러줘야할건 걸러서 탐색해야합니다.

 

소스코드 :

 

from collections import Counter
def solution(a):
    answer = 0 
    m = Counter(a)
    cnt = 0
    left = 0
    for k in m.keys():
        if m[k]<=answer:continue
        idx = 0
        cnt = 0
        while idx < len(a)-1:
            if (a[idx]!= k and a[idx+1]!= k) or a[idx] == a[idx+1]:
                idx+=1
                continue
            cnt+=1
            idx+=2
        answer= max(answer,cnt)
    return answer*2

 

요새 파이썬을 공부하고있어서 난이도가 낮은문제는 파이썬으로 푸는 연습을 하고있습니다.

궁금한점 혹은 모르는점 논리적인 오류등 어떤 질문이든 댓글은 언제나 환영입니다.