슬라이딩 윈도우 - 13144번: List of Unique Numbers

jisu_log·2025년 6월 22일

알고리즘 문제풀이

목록 보기
52/105

  • 슬라이딩 윈도우(set)로 연속 구간을 유지
  • right을 늘려가며 값을 윈도우에 추가
  • 중복이 생기면 윈도우 내에 중복이 없을 때까지 left를 오른쪽으로 옮기면서 중복 제거
  • 윈도우 내에 중복이 없다면,right을 끝으로 하는 부분수열 개수 = (right - left + 1)를 cnt에 누적
    -> O(n)만에 탐색 가능
  • right을 끝으로 하는 부분수열 개수:
    ex) 윈도우에 [2, 3, 4]가 존재한다면
    [2, 3, 4], [3, 4], [4] -> 총 right - left + 1개 존재! (그 외 가능한 [2, 3] 등은 이미 3이 right일 때 카운팅 되었음)
from collections import deque

n = int(input())
nums = list(map(int, input().split()))
left = 0
right = 0
s = set()
cnt = 0

for right in range(n):
    while nums[right] in s:
        s.remove(nums[left])
        left += 1

    s.add(nums[right])
    cnt += right - left + 1


print(cnt)

0개의 댓글