과일 탕후루

Sally·2026년 3월 30일

과일탕후루

  • 일단 실패 코드 .. (시간초과)
# 과일 탕후루
N = int(input())
data = list(map(int, input().split()))
max_ans = 0
i,j = 0,1

def check(idx_i, idx_j):
  fruits = data[idx_i:idx_j+1]
  fruits = set(fruits)
  ans = len(fruits)
  return ans

while i<N-1 and j<N:
  cnt = check(i,j)
  if cnt <= 2:
    max_ans = max(max_ans, j - i + 1)
    j += 1
  else:
    i+=1
    j = i +1

print(max_ans)
  • 두 번째 실패 코드 (시간초과)
import sys
input = sys.stdin.readline
from collections import defaultdict

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

max_ans = 0
i, j = 0, 1
fruits = defaultdict(int)

while i<N-1 and j <N:
    fruits = defaultdict(int)
    for idx in range(i, j+1):
        fruits[data[idx]]+=1

    if len(fruits)>2:
        i+=1
        continue
    elif len(fruits)<=2:
        max_ans = max(max_ans, j+1-i)
    j+=1
print(max_ans)
  • 정답
import sys
input = sys.stdin.readline
from collections import defaultdict

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

max_ans = 0
i, j = 0, 1
fruits = defaultdict(int)
if N ==1:
    print(1)
else:
    fruits[data[i]] +=1
    fruits[data[j]]+=1

    while i<N-1 and j <N:
        
        nonzero_count = len([fruits.keys() for v in fruits.values() if v != 0])

        if nonzero_count>2:
            fruits[data[i]]-=1
            i+=1
            continue
        else:
            max_ans = max(max_ans, j+1-i)
            j+=1
            if j<N:
                fruits[data[j]]+=1
            
    print(max_ans)

0개의 댓글