import java.util.*;
class Main {
public ArrayList<Integer> solution(int n, int m, int[] arr) {
ArrayList<Integer> answer = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
// 배열 1~3일까지만 map에 저장
for(int i = 0; i < m - 1; i++) {
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
}
int lt = 0;
// 4일부터 시작
for(int rt = m - 1; rt < n; rt++) {
map.put(arr[rt], map.getOrDefault(arr[rt], 0) + 1);
// map.size()는 key의 갯수, value는 x
// 4일치를 answer에 추가
answer.add(map.size());
// map에서 lt 위치에 값을 -1
map.put(arr[lt], map.get(arr[lt]) - 1);
// 0도 key가 되기때문에 0이면 삭제
if(map.get(arr[lt]) == 0) {
map.remove(arr[lt]);
}
// lt++
lt++;
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
for(int x : T.solution(n, m, arr)) {
System.out.print(x + " ");
}
}
}
import java.util.*;
class Main {
public ArrayList<Integer> solution(int n, int m, int[] arr) {
ArrayList<Integer> answer = new ArrayList<>();
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < m - 1; i++) {
map.put(arr[i], map.getOrDefault(arr[i], 0) + 1);
}
int lt = 0;
for(int rt = m - 1; rt < n; rt++) {
map.put(arr[rt], map.getOrDefault(arr[rt], 0) + 1);
answer.add(map.size());
map.put(arr[lt], map.get(arr[lt]) - 1);
if(map.get(arr[lt]) == 0) {
map.remove(arr[lt]);
}
lt++;
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
int n = kb.nextInt();
int m = kb.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = kb.nextInt();
}
for(int x : T.solution(n, m, arr)) {
System.out.print(x + " ");
}
}
}
'코딩테스트 > 기초' 카테고리의 다른 글
32. 아나그램(해쉬) (0) | 2024.12.28 |
---|---|
31. 학급 회장(해쉬) (2) | 2024.12.28 |
30. 최대 길이 연속부분수열 (0) | 2024.12.24 |
29. 연속된 자연수의 합 (0) | 2024.12.21 |
28. 연속 부분수열 (1) | 2024.12.20 |