[BOJ] Q13144 List of Unique Numbers

Question

Language: Python

Difficulty: Gold 4

해당 문제는 Two pointer을 활용하여 가질 수 있는 순서쌍의 갯수를 구하는 유형의 문제이다. 숫자가 삽입 될때 늘어나는 순서쌍의 갯수를 파악하는 것이 중요하다.

아래의 원리를 통해 순서쌍의 갯수를 구하는 과정을 단순화 시킬 수 있다.

13144

만약 새로운 숫자가 탐색 된 경우라면, 위의 로직을 활용하여 추가되는 순서쌍의 갯수를 구하고, 만일 다음에 오는 숫자가 이미 포함된 숫자인 경우, 해당 숫자가 안 나올때 까지 start 값을 늘리는 작업을 수행한다.

Solution

def solution():
    start,end=0,0
    checked=[False]*100001
    count=0

    while end < n:
        #다음에 탐색된 숫자가 이전에 탐색되지 않은 숫자인 경우
        if not checked[numbers[end]]:
            checked[numbers[end]]=True
            end+=1
            count+=(end-start)
        #이미 이전에 처리한 적 있는 숫자인 경우
        else:
            while checked[numbers[end]]:
                checked[numbers[start]]=False
                start+=1
    print(count)


if __name__ == "__main__":
    n=int(input())
    numbers=list(map(int,input().split()))
    solution()

댓글남기기