문제
풀이
- 난이도 : 레벨 3
- 월간 코드챌린지가 뭔지는 모르겠으나 기업 코딩테스트용-스타일 문제는 아니다.
- 주어지는 배열 a의 최대 길이가 500,000 이기 때문에 O(N^2)으로는 시간초과가 나온다.
- 부분수열은 순서를 바꿀 수 없기 때문에 순서대로 a 배열을 순환하며 조건에 맞게 딕셔너리에 값을 넣어준 후 나중에 비교하였다.
[0, 1, 0, 1]
과 같은 순서는 문제 없으나[0, 1, 1, 0]
,[1, 1, 0, 1]
과 같은 자료는 문제가 될 수 있다.- 따라서 위 케이스 등을 고려해서 문제에서 요구한 답을 O(N)으로 구할 수 있도록 코드를 짰다.
코드
from collections import defaultdict
def solution(a):
N = len(a)
if N < 2 :
return 0
dic, record = defaultdict(int), defaultdict(lambda : -2)
for i in range(N - 1):
cur, nxt = a[i], a[i+1]
if cur != nxt:
if record[cur] != i-1:
dic[cur] += 2
record[cur] = i
if record[nxt] != i-1:
dic[nxt] += 2
record[nxt] = i
return max(dic.values())
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[월간 코드 챌린지 시즌2]모두 0으로 만들기, 파이썬 (0) | 2021.04.18 |
---|---|
2020 카카오 인턴십 - 보석 쇼핑, 파이썬 (0) | 2021.04.06 |
[프로그래머스] 스티커 모으기(2)- 파이썬 (0) | 2021.04.05 |
[프로그래머스]2020 카카오 인턴십- 경주로 건설, 파이썬 (0) | 2021.04.02 |
[프로그래머스] Summer/Winter Coding(~2018) - 기지국 설치, 파이썬 (0) | 2021.04.01 |