최종코드(코드링크)
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 방법으로 시도하니 통과 !
'알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스 - Python] 비밀지도 (0) | 2024.08.09 |
---|---|
[프로그래머스 - Python] 숫자 문자열과 영단어 (0) | 2024.08.09 |
[백준 - Python] 17609. 회문 (0) | 2024.08.09 |
[백준 - Python] 2230. 수 고르기 (0) | 2024.08.09 |
[백준 - Python] 1806. 부분합 (0) | 2024.08.09 |