์ฌ๊ธฐ ๋ฌธ์ ์ง์์ ํ์ ์ด๋ฐฅ ๋ฌธ์ ๋ฅผ ํ์๋ค.
ใด ๋ฌธ์ ์ง : https://www.acmicpc.net/workbook/view/8708
ใด ๋ฌธ์ : https://www.acmicpc.net/problem/2531
๋ฌธ์ ๊ฐ ์กฐ๊ธ ๊ธธ๊ฒ ์ค๋ช ์ด ๋์ด์๋๋ฐ ์์ฝํ๋ฉด
- ์ฐ์์ผ๋ก ๋จน์ ์ ์๋ ์ด๋ฐฅ์ ์ต๋ํ ์ซ์๊ฐ ๊ณ ์ ํ๊ฒ ๋ค์ด๊ฐ๋ฉด ๋๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋์ ์ด ์ด๋ฐฅ์ ์ฟ ํฐ์ด๋ฐฅ์ด ๋ค์ด๊ฐ์์ผ๋ฉด ๊ทธ๋๋ก ๋๊ณ , ์๋๋ผ๋ฉด ์ฟ ํฐ์ด๋ฐฅ์ +1ํ๋ฉด ๋๋ค.
์ด๋ฐฅ ๊ทธ๋ฆ ๊ฐฏ์ (n)์ ๋งค๋ฒ for๋ฌธ์ ๋๋ฉด์ ์ฐ์ ์ซ์ (k)๋ฅผ ์ฒดํฌํ๋ฉด ๋๋๋ฐ ๊ทธ๋ด ๊ฒฝ์ฐ
n์ต๋ 30,000์ k 3,000๊น์ง ํด์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆด ๊ฒ ๊ฐ์์ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ฐพ์์ผ ๋์์๋ค.
๊ทธ๋์ ์ด๋ฐฅ ๊ทธ๋ฆ ๊ฐฏ์ (n)์์ ๊ฐ ์ด๋ฐฅ๋ง๋ค HashMap์ผ๋ก ๋ช๋ฒ์ ์ด๋ฐฅ์ด ๋ช ๊ฐ๋ฅผ ๊ฐ์ง๊ณ ์๋์ง ์ ์ฅํ๋ค๊ฐ
๋ค์ ์ด๋ฐฅ์ผ๋ก ์ฎ๊ธฐ๋ฉด์ ๋งจ ์ฒซ ์ด๋ฐฅ์ ์ง์ฐ๊ณ ์๋ก์ด ์ด๋ฐฅ์ ๋ฃ์ผ๋ฉด์ ๊ณ์ฐํ๋ค.
์ ๋ฆฌํ๋ฉด
1. ํ์ ์ด๋ฐฅ์ด๊ธฐ ๋๋ฌธ์ ๋ค์์๋ถํฐ k๊ฐ์ ์ด๋ฐฅ์ (์ด๋ฐฅ์ ์ข ๋ฅ, ๊ฐฏ์) ํํ๋ก map์ ๋ฃ๋๋ค.
2. ์ฒ์๋ถํฐ k๊ฐ ์ ๊น์ง๋ ๋ค์์ ํ๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ฒ์๊บผ๋ฅผ ๋ฃ๋๋ค.
3. ๊ทธ ๋ค์ ๋ถํฐ๋ ์ง๊ธ ๋๊ณ ์๋ ๊ฑฐ์์ k๊ฐ ์ ๊บผ๋ฅผ ์ ๊ฑฐํ๊ณ ์ง๊ธ๊บผ๋ฅผ ๋ฃ๋๋ค.
4. ํ์ ์ด๋ฐฅ ๊ฐฏ์๋ ์ด map์ size์๋ค ์ฟ ํฐ์ ์ฌ๋ถ์ ๋ฐ๋ผ +1์ ๋ํ๋ค.
๋ค๋ฅธ ํด์ค ํ์ด๋ฅผ ์ดํด๋ณด๋ฉด ์กฐ๊ธ ๋ ๋จ์ํ๊ฒ ๋ฌธ์ ๋ฅผ ํธ๋ ๋ฐฉ๋ฒ๋ค์ด ์์๋ค.
- ์์ 2๋ฒ,3๋ฒ์ ๋๋ ์ ๊ฐ์ ธ๊ฐ์ง ์๊ณ ์ฒ์๋ถํฐ ๋ค์ ๊ฐ์ ๋ฃ์ด๋๊ณ 2๋ฒ 3๋ฒ์ for๋ฌธ์ ํ์ ๋ค. https://code-lab1.tistory.com/m/182
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ฅผ ํตํด์ ๋ก์ง์ ๋จ์ํ๊ฒ ๊ฐ์ ธ๊ฐ๋ค. https://hunucho.tistory.com/m/312
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.HashMap;
public class Main {
static int[] dishArr;
static HashMap<Integer,Integer> temp;
static int c;
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// ํ์ ์ด๋ฐฅ ๋ฒจํธ์ ๋์ธ ์ ์์ ์ N, ์ด๋ฐฅ์ ๊ฐ์ง์ d, ์ฐ์ํด์ ๋จน๋ ์ ์์ ์ k, ์ฟ ํฐ ๋ฒํธ c
int N = Integer.parseInt(st.nextToken());
int d = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
dishArr = new int[N];
// ์ ์ ์ธํ
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
dishArr[i] = Integer.parseInt(st.nextToken());
}
temp = new HashMap();
// ์ด๋ฐฅ์ด ์ํ์ด๊ธฐ ๋๋ฌธ์ ์์์ ๋ง์ง๋ง ๋ฃ์ด๋๊ธฐ
for (int i = 0; i < k; i++) {
add(dishArr[N-1-i]);
}
int size = Integer.MIN_VALUE;
size = max(size);
for (int i = 0; i < N; i++) {
// ์ ๊ฑฐํ ์ด๋ฐฅ ์ ํ๊ธฐ : ์ํ์ด๊ธฐ ๋๋ฌธ์ ๋ถ๊ธฐํ์
int deleted;
if (i < k) {
deleted = dishArr[N - k + i];
}
else {
deleted = dishArr[i - k ];
}
// ์์ ์ด๋ฐฅ ์ ๊ฑฐ
remove(deleted);
int dish = dishArr[i];
add(dish);
size = max(size);
}
System.out.printf("%d \n", size);
}
static void remove(int deleted) {
if (temp.get(deleted) == 1) {
temp.remove(deleted);
}
else {
temp.put(deleted, temp.get(deleted) - 1);
}
}
static void add(int dish) {
if (! temp.containsKey(dish)) {
temp.put(dish, 1);
}
else {
temp.put(dish, temp.get(dish) + 1);
}
}
static int max(int size) {
int free = 0;
if (! temp.containsKey(c)) {
free = 1;
}
int max = Math.max(temp.size() + free, size);
return max;
}
}
'๐ค ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
baekjoon. ์ ๋ง๋๊ธฐ (10799) [python][Silver II] (0) | 2023.01.29 |
---|---|
baekjoon. ์คํ (10828) [python][Silver IV] (0) | 2023.01.16 |
baekjoon. ํํฐ (0) | 2022.10.07 |
baekjoon. ๋ ๊ฒ์ (0) | 2022.08.31 |
baekjoon. ๋ฌธ์์ด ํญ๋ฐ (0) | 2022.08.29 |