문제
https://www.acmicpc.net/problem/13144
13144번: List of Unique Numbers
길이가 N인 수열이 주어질 때, 수열에서 연속한 1개 이상의 수를 뽑았을 때 같은 수가 여러 번 등장하지 않는 경우의 수를 구하는 프로그램을 작성하여라.
www.acmicpc.net
코드
import java.util.*;
import java.io.*;
public class b13144 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int n=Integer.parseInt(br.readLine());
int[] arr=new int[n];
long answer=0;
st=new StringTokenizer(br.readLine());
for(int i=0; i<n; i++){
arr[i]=Integer.parseInt(st.nextToken());
}
// 투 포인터
int end=0;
boolean[] visited=new boolean[100001];
for(int i=0; i<n; i++){
while(end<n && visited[arr[end]]==false){
visited[arr[end]]=true;
end++;
}
visited[arr[i]]=false;
answer+=(end-i);
}
System.out.println(answer);
}
}
시간복잡도
O(n)
어려웠던 점
문제 조건상 answer이 int 범위를 벗어나는 것을 늦게 알아차려 해결하는데 시간이 걸렸다.
'문제풀이 > 기타' 카테고리의 다른 글
[파이썬] Pro 과제 진행하기 (0) | 2023.12.20 |
---|---|
[JAVA] [분할정복] Pro 쿼드압축 후 개수 세기 (0) | 2023.07.26 |
[JAVA] Pro n^2 배열 자르기 (0) | 2023.07.25 |
[JAVA] Pro 롤케이크 자르기 (0) | 2023.07.24 |
[JAVA] Pro 우박수열 정적분 (0) | 2023.07.21 |