♟️ 알고리즘/알고리즘_백준
[Python][백준] 13144. List of Unique Numbers / 투포인터 (G4)
Jerry_K
2024. 10. 19. 15:34
https://www.acmicpc.net/problem/13144
🗒️파이썬 코드 풀이
import sys
input = sys.stdin.readline
N = int(input())
lst = list(map(int,input().split()))
number = set()
rs = sp = 0
for ep in range(N):
while lst[ep] in number:
number.remove(lst[sp])
sp += 1
number.add(lst[ep])
rs = rs + ep - sp + 1
print(rs)
ex)
1 2 3 1 2
1. 위와 같은 입력을 예시로 들어보자.
아마 대부분의 보통은 1 / 1,2 / 1,2,3 / 2 / 2,3 / 2,3,1 / 3 / 3,1 / 3,1,2 / 1 / 1,2 / 2의 순서대로 생각할 것 같다.
2. 하지만 이 문제는 1 / 1,2 / 2 / 1,2,3 / 2,3 / 3 ... 의 접근법이다.
(이러한 접근도 가능하다는 것 생각)
3. 글로 보는 것을 헷갈리고 코드로 이해하는 것 좋다.
4. 메모리를 아끼기 위해 집합 자료 구조를 사용한다.
5. sp (start point)와 ep (end point)를 잘 이용해야한다.
📌 문제 코멘트
이렇게 많은 수열들을 모두 리스트에 넣으면 메모리 초과가 발생한다.
이를 위해 집합 자료 구조를 사용한다.
그리고 N의 범위가 10만이므로 1개의 반복문을 써야한다.
📚문제
길이가 N인 수열이 주어질 때, 수열에서 연속한 1개 이상의 수를 뽑았을 때 같은 수가 여러 번 등장하지 않는 경우의 수를 구하는 프로그램을 작성하여라.
입력
첫 번째 줄에는 수열의 길이 N이 주어진다. (1 ≤ N ≤ 100,000)
두 번째 줄에는 수열을 나타내는 N개의 정수가 주어진다. 수열에 나타나는 수는 모두 1 이상 100,000 이하이다.
출력
조건을 만족하는 경우의 수를 출력한다.
예제 입력 1 복사
5
1 2 3 4 5
예제 출력 1 복사
15
예제 입력 2 복사
5
1 2 3 1 2
예제 출력 2 복사
12
예제 입력 3 복사
5
1 1 1 1 1
예제 출력 3 복사
5