https://www.acmicpc.net/problem/30804

처음에는 set을 반복적으로 써서 시간초과가 났다.
투포인터를 둘 다 0에서 시작한 상태로 end만 1씩 늘려가면서 종류를 보다가 3종류가 넘어가면 start를 늘리는 방식으로 하면 된다.
import sys
from collections import defaultdict
input = sys.stdin.readline
n = int(input())
fruits = list(map(int, input().split()))
start = 0
answer = 0
d = defaultdict(int) # 딕셔너리 생성
for end in range(n):
d[fruits[end]] += 1
while len(d) > 2: # 종류가 2개 초과면 => 줄여야함
d[fruits[start]] -= 1 # start에 있는 과일 줄임
if d[fruits[start]] == 0: # 줄였는데 0이면 삭제
del d[fruits[start]]
start += 1
answer = max(answer, end - start + 1)
print(answer)