알고리즘 문제 풀이

[백준 - Python] 30804. 과일 탕후루

김혠 2024. 8. 9. 11:54

문제링크

 

최종코드(코드링크)

from collections import defaultdict
 
N = int(input())
arr = list(map(int,input().split()))
 
left, right, set_f = 0, 0, 0
fruit = defaultdict(int)
answer = 0
while right < N:
    if fruit[arr[right]] == 0:
        set_f += 1
    fruit[arr[right]] += 1
 
    while set_f > 2:
        fruit[arr[left]] -= 1
        if fruit[arr[left]] == 0:
            set_f -= 1
        left += 1
 
    answer = max(answer, right - left + 1)
    right += 1

print(answer)

 

1. Two Pointers 방법으로 시도 하였으나, set을 반복적으로 호출하여 시간초과가 발생.

N = int(input())
array = list(map(int, input().split()))

left, right = 0, len(array) - 1
while True:
    if len(set(array[left: right+1])) > 2:
        if left <= right - 1: right -= 1
        if left + 1 <= right: left += 1
    else:
        if (len(set(array[left - 1: right + 1])) <= 2) and (left > 0): left -= 1
        elif len(set(array[left:right])) <= 2: right += 1
        break
print(right - left + 1)

 

dic을 사용하여 과일 개수를 관리하는 Two Pointers 방법으로 시도하니 통과 !