BackJoon Algorithm List of Unique Numbers 13144 (Java)
BackJoon Algorithm - Java
문제
풀이
..
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Back_13144 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 수열의 길이 N을 입력 받음
int N = Integer.parseInt(br.readLine());
// 수열을 저장할 배열 생성
int arr[] = new int[N];
// 방문 여부 체크 배열 생성 (100001로 선언, 문제에서 숫자가 1 ~ 100000 범위로 주어짐)
boolean isVisited[] = new boolean[100001];
// 수열 입력 받기
StringTokenizer token = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(token.nextToken());
}
// 부분 수열 개수를 카운트할 변수
long count = 0; // long으로 변경하여 큰 값도 처리 가능하도록 함
// 두 포인터를 이용한 투포인터 알고리즘
for (int st = 0, en = 0; st < N; st++) {
// en을 증가시키며 중복되지 않는 최대 범위를 찾음
while (en < N && !isVisited[arr[en]]) {
isVisited[arr[en]] = true;
en++;
}
// st를 시작으로 en까지의 서로 다른 숫자로 이루어진 부분 수열 개수를 더함
count += (en - st);
// st가 다음 위치로 넘어갈 때, 방문 체크 해제
isVisited[arr[st]] = false;
}
// 결과 출력
System.out.println(count);
br.close();
}
}
댓글남기기