algorithm/SlidingWindow
[백준13144/골드4] List of Unique Numbers - Python
ayeongjin
2025. 3. 2. 14:28
https://www.acmicpc.net/problem/13144
부분수열을 만들떄, 부분 수열의 끝 점을 정한 후 그 점 까지 중복된 수가 안나오는 제일 긴 시작점을 구했다. (for end in range(N))
그리고 그 부분수열에서 시작점을 변경하며 나올 수 있는 부분수열의 수를 더해줬다. (end - start + 1)
# 성공 코드
N = int(input())
numbers = list(map(int, input().split()))
select = set() # 선택된 수 (슬라이딩 윈도우 안의 수)
start = 0 # 시작점
result = 0
for end in range(N): # 끝점 0번 인덱스부터 끝까지 순회
# 숫자가 중복되면 시작점 제거 후 다음 시작점 탐색
while numbers[end] in select:
select.remove(numbers[start])
start += 1
# 끝점 추가
select.add(numbers[end])
# 현재 수열에서 경우의 수 계산
result += (end - start + 1)
print(result)
윈도우를 옮기면서 현재 끝점에 대한 가장 긴 수열을 찾아서 (시작점 찾기) 경우의 수를 계산해야겠다는 생각은 금방 했지만
끝점과 시작점을 검사하고 중복 제거하는 과정을 푸는데 좀 오래걸렸다.