본문 바로가기
알고리즘/백준 문제

13144 - List of Unique Number

by HDobby 2023. 6. 30.

https://www.acmicpc.net/problem/13144

 

13144번: List of Unique Numbers

길이가 N인 수열이 주어질 때, 수열에서 연속한 1개 이상의 수를 뽑았을 때 같은 수가 여러 번 등장하지 않는 경우의 수를 구하는 프로그램을 작성하여라.

www.acmicpc.net

생각해보기

  1. 같은 수가 여러 번 등장하면 범위가 줄어든다.
  2. 투 포인터를 사용하여 우측 값을 하나씩 증가시키며 확인한다.
  3. 왼쪽 포인터의 위치는 한칸씩 옮기며 확인하는 것보다는 우측 포인터의 숫자가 나왔던 위치보다 한칸 우측으로 옮기는게 효율적이다.
  4. 같은 수가 등장한 위치를 기록해두자.

코드

#include<iostream>

using namespace std;

int N;
int arr[100001];
int chk[100001];
long long ans=0;

void input(){
    cin>>N;
    for(int i=0;i<N;++i)
        cin>>arr[i];
}

void calc(){
    fill(&chk[0], &chk[100001], -1);
    int l=0,r=1;
    ans = 1;

    chk[arr[0]] = 0;
    while(r<N){
        int num = arr[r];
        if(chk[num] >= l){
            l = chk[num]+1;
        }

        ans += r-l+1;
        chk[num] = r;
        ++r;
    }
}

void solution(){
    calc();
    cout<<ans<<'\n';
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    input();
    solution();

    return 0;
}

728x90

'알고리즘 > 백준 문제' 카테고리의 다른 글

9527 - 1의 개수 세기  (0) 2023.07.07
1781 - 컵라면  (0) 2023.07.03
3109 - 빵집  (0) 2023.06.29
17182 - 우주 탐사선  (0) 2023.06.26
7490 - 0 만들기  (0) 2023.06.22

댓글