[Python/백준]13144 List of Unique Numbers

Kanto(칸토)·2023년 8월 18일
0

알고리즘 인터뷰

목록 보기
10/30

투포인터가 아니면 메모리 초과로 안풀리는 문제.
투포인터를 써도 되는 이유는 이미 한번 탐색해서 지나간 부분은 중복해서 다시 탐색할 필요가 없기 때문이다.
예를 들어서 [1,2,3,4,5,1,2,3] 에서 1,2,3,4,5 까지는 중복 없이 지나간 부분이라는 것을 확인했는데 그 다음에 2,3,4,5,1 을 확인할 때 [2,3,4,5] 구간을 다시 탐색할 필요가 없다. 여기서 시간초과가 발생한다. 따라서 투포인터로 양 끝을 한칸씩만 움직이면서 그 지점 이후로만 탐색하는 것이 주요 아이디어였다.
안 풀려서 을 참조했음.

n = int(input())
arr = [*map(int,input().split())]

# 가장 멀리갈 수 있는 unique 한 배열의 끝을 찾아본다.
mem = [0] * 100001
e = 0
s = 0
ret = 0
while e < n:
    if not mem[arr[e]]:
        mem[arr[e]] +=1
        e +=1
    else:
        ret += (e-s)
        mem[arr[s]] -= 1
        s+=1

ret += ((e-s) * (e-s+1)) // 2
print(ret)
profile
통계학으로 사람들의 행동을 이해하고 싶습니다.

0개의 댓글

관련 채용 정보