[백준/BOJ][Python] 30804번 과일 탕후루

Eunding·2025년 5월 2일
0

algorithm

목록 보기
103/107

30804번 과일 탕후루

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)

0개의 댓글