๐ก Info
๋ด์ฉ
๊ธฐ์์ฌ์์ ์ด๊ณ ์๋ ์ค๊ท๋ ํ ๊ฐ์ ๋ฉํฐํญ์ ์ด์ฉํ๊ณ ์๋ค. ์ค๊ท๋ ํค๋ณด๋, ํค์ด๋๋ผ์ด๊ธฐ, ํธ๋ํฐ ์ถฉ์ ๊ธฐ, ๋์งํธ ์นด๋ฉ๋ผ ์ถฉ์ ๊ธฐ ๋ฑ ์ฌ๋ฌ ๊ฐ์ ์ ๊ธฐ์ฉํ์ ์ฌ์ฉํ๋ฉด์ ์ด์ฉ ์ ์์ด ๊ฐ์ข ์ ๊ธฐ์ฉํ์ ํ๋ฌ๊ทธ๋ฅผ ๋บ๋ค ๊ฝ์๋ค ํ๋ ๋ถํธํจ์ ๊ฒช๊ณ ์๋ค. ๊ทธ๋์ ์ค๊ท๋ ์์ ์ ์ํ ํจํด์ ๋ถ์ํ์ฌ, ์๊ธฐ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ์ ๊ธฐ์ฉํ์ ์ฌ์ฉ์์๋ฅผ ์์๋ด์๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฌ๊ทธ๋ฅผ ๋นผ๋ ํ์๋ฅผ ์ต์ํํ๋ ๋ฐฉ๋ฒ์ ๊ณ ์ํ์ฌ ๋ณด๋ค ์พ์ ํ ์ํํ๊ฒฝ์ ๋ง๋ค๋ ค๊ณ ํ๋ค.
์๋ฅผ ๋ค์ด 3 ๊ตฌ(๊ตฌ๋ฉ์ด ์ธ ๊ฐ ๋ฌ๋ฆฐ) ๋ฉํฐํญ์ ์ธ ๋, ์ ๊ธฐ์ฉํ์ ์ฌ์ฉ ์์๊ฐ ์๋์ ๊ฐ์ด ์ฃผ์ด์ง๋ค๋ฉด,
ํค๋ณด๋, ํค์ด๋๋ผ์ด๊ธฐ, ํธ๋ํฐ ์ถฉ์ ๊ธฐ์ ํ๋ฌ๊ทธ๋ฅผ ์์๋๋ก ๋ฉํฐํญ์ ๊ฝ์ ๋ค์ ๋์งํธ ์นด๋ฉ๋ผ ์ถฉ์ ๊ธฐ ํ๋ฌ๊ทธ๋ฅผ ๊ฝ๊ธฐ ์ ์ ํธ๋ํฐ์ถฉ์ ๊ธฐ ํ๋ฌ๊ทธ๋ฅผ ๋นผ๋ ๊ฒ์ด ์ต์ ์ผ ๊ฒ์ด๋ฏ๋ก ํ๋ฌ๊ทธ๋ ํ ๋ฒ๋ง ๋นผ๋ฉด ๋๋ค.
๐ฅ์ ๋ ฅ ์กฐ๊ฑด
2 7
2 3 2 3 1 2 7
๐ค์ถ๋ ฅ ์กฐ๊ฑด
2
์ค์ ํ์ด ์๊ฐ : 20๋ถ
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int[] arr = new int[N];
for(int i=0; i<N; i++) {
arr[i] = sc.nextInt();
}
int count = 0;
int[] multiTab = new int[N+1];
for(int i=0; i<K; i++) {
multiTab[arr[i]]++;
}
for (int i=N; i<K; i++) {
if (multiTab[arr[i]] != arr[i]) count++;
}
System.out.println(count);
}
}
for(int j : multiTab) {
โ ๋ฉํฐํญ ๋ฐฐ์ด์ ์ ์ฅ๋ ์๋ฅผ ์ํfor (int k = i + 1; k < K; k++) {
if (arr[k] == j) {
idx = k;
break;
}
if (idx == -1) { out = j; break; }
โ ๋์ผํ ์ซ์๊ฐ ์๋ค๋ฉด ํ์ฌ ์ซ์๋ฅผ ์ ๊ฑฐํ ์ซ์๋ก ๋ณด๊ธฐ(out)if (idx > far) { far = idx; out = j; }
โ ๋์ผํ ์ซ์๊ฐ ์๋ค๋ฉด ๋์ด๊ฐ๊ธฐmultiTab.remove(out); multiTab.add(arr[i]); count++;
โ ๋นผ์ผํ ์ซ์๋ฅผ ์ ๊ฑฐํ๊ณ , ์๋ก์ด ์ซ์๋ฅผ ์ฝ์
else { multiTab.add(arr[i]); }
โ multiTab ๋ฐฐ์ด์ ๊ณต๊ฐ์ด ์๋ค๋ฉด ์ผ๋จ ์ฑ์์ผ ํจ!!//before
//[1]
int[] arr = new int[N];
for(int i=0; i<N; i++) {
arr[i] = sc.nextInt();
}
...
//[2]
int[] multiTab = new int[N+1];
//[3]
for(int i=0; i<K; i++) {
multiTab[arr[i]]++;
}
for (int i=N; i<K; i++) {
if (multiTab[arr[i]] != arr[i]) count++;
}
System.out.println(count);
//after
//[1]
int[] arr = new int[K];
for(int i=0; i<K; i++) {
arr[i] = sc.nextInt();
}
...
//[2]
Set<Integer> multiTab = new HashSet<>();
//[3]
for(int i=0; i<K; i++) {
//๋ฉํฐํญ์ ์ด๋ฏธ ์๋ค๋ฉด ๋์ด๊ฐ๋๋ก
if(multiTab.contains(arr[i])) {
continue;
}
//๋ฉํฐํญ์ด ๊ฝ์ฐฌ๋ค๋ฉด
if(multiTab.size() == N) {
int far = -1; //๋ฉํฐํญ์์ ๊ฐ์ฅ ๋จผ ์ ๊ธฐ์ฉํ
int out = -1; //๋ฉํฐํญ์์ ๋บ ์ ๊ธฐ์ฉํ
//๋ฉํฐํญ์ ์๋ ์ ๊ธฐ์ฉํ ์ค ๊ฐ์ฅ ๋์ค์ ์ฌ์ฉํ ๊ฒ ์ฐพ๊ธฐ
for(int j : multiTab) {
int idx = -1;
for (int k = i + 1; k < K; k++) {
if (arr[k] == j) {
idx = k;
break;
}
}
if (idx == -1) {
out = j;
break;
}
if (idx > far) {
far = idx;
out = j;
}
}
// ์ฐพ์ ์ ๊ธฐ์ฉํ์ ๋ฉํฐํญ์์ ๋นผ๊ณ ํ์ฌ ์ ๊ธฐ์ฉํ์ ๊ฝ์
multiTab.remove(out);
multiTab.add(arr[i]);
count++;
} else {
// ๋ฉํฐํญ์ ๋น ๊ตฌ๋ฉ์ด ์๋ ๊ฒฝ์ฐ ํ์ฌ ์ ๊ธฐ์ฉํ์ ๊ฝ์
multiTab.add(arr[i]);
}
}
System.out.println(count);
์ค์ ํ์ด ์๊ฐ : 50๋ถ(์ฒซ ํ์ด ์๊ฐ ํฌํจ)
for(int j : multiTab) {
โ ๋ฉํฐํญ ๋ฐฐ์ด์ ์ ์ฅ๋ ์๋ฅผ ์ํfor (int k = i + 1; k < K; k++) {
if (arr[k] == j) {
idx = k;
break;
}
if (idx == -1) { out = j; break; }
โ ๋์ผํ ์ซ์๊ฐ ์๋ค๋ฉด ํ์ฌ ์ซ์๋ฅผ ์ ๊ฑฐํ ์ซ์๋ก ๋ณด๊ธฐ(out)if (idx > far) { far = idx; out = j; }
โ ๋์ผํ ์ซ์๊ฐ ์๋ค๋ฉด ๋์ด๊ฐ๊ธฐmultiTab.remove(out); multiTab.add(arr[i]); count++;
โ ๋นผ์ผํ ์ซ์๋ฅผ ์ ๊ฑฐํ๊ณ , ์๋ก์ด ์ซ์๋ฅผ ์ฝ์
else { multiTab.add(arr[i]); }
โ multiTab ๋ฐฐ์ด์ ๊ณต๊ฐ์ด ์๋ค๋ฉด ์ผ๋จ ์ฑ์์ผ ํจ!!import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int K = sc.nextInt();
int[] arr = new int[K];
for(int i=0; i<K; i++) {
arr[i] = sc.nextInt();
}
int count = 0;
Set<Integer> multiTab = new HashSet<>();
for(int i=0; i<K; i++) {
//๋ฉํฐํญ์ ์ด๋ฏธ ์๋ค๋ฉด ๋์ด๊ฐ๋๋ก
if(multiTab.contains(arr[i])) {
continue;
}
//๋ฉํฐํญ์ด ๊ฝ์ฐฌ๋ค๋ฉด
if(multiTab.size() == N) {
int far = -1; //๋ฉํฐํญ์์ ๊ฐ์ฅ ๋จผ ์ ๊ธฐ์ฉํ
int out = -1; //๋ฉํฐํญ์์ ๋บ ์ ๊ธฐ์ฉํ
//๋ฉํฐํญ์ ์๋ ์ ๊ธฐ์ฉํ ์ค ๊ฐ์ฅ ๋์ค์ ์ฌ์ฉํ ๊ฒ ์ฐพ๊ธฐ
for(int j : multiTab) {
int idx = -1;
for (int k = i + 1; k < K; k++) {
if (arr[k] == j) {
idx = k;
break;
}
}
if (idx == -1) {
out = j;
break;
}
if (idx > far) {
far = idx;
out = j;
}
}
// ์ฐพ์ ์ ๊ธฐ์ฉํ์ ๋ฉํฐํญ์์ ๋นผ๊ณ ํ์ฌ ์ ๊ธฐ์ฉํ์ ๊ฝ์
multiTab.remove(out);
multiTab.add(arr[i]);
count++;
} else {
// ๋ฉํฐํญ์ ๋น ๊ตฌ๋ฉ์ด ์๋ ๊ฒฝ์ฐ ํ์ฌ ์ ๊ธฐ์ฉํ์ ๊ฝ์
multiTab.add(arr[i]);
}
}
System.out.println(count);
}
}