https://www.acmicpc.net/problem/20922
๋ฌธ์
- ๊ฐ์ ์์๊ฐ K๊ฐ ์ดํ๋ก ๋ค์ด์๋ ์ต์ฅ ์ฐ์ ๋ถ๋ถ ์์ด ๊ธธ์ด ๊ตฌํ๊ธฐ
์ ํ์ฌํญ
- N ≤ 20๋ง
ํ์ด
๊ฐ๋ฅํ ๋ชจ๋ ๊ตฌ๊ฐ์ ์์์ ๊ณผ ๋์ ์ 2์ค for๋ฌธ์ ํตํด ๊ตฌํ๊ณ , ์์ ์๋ ์์๋ค์ ๊ฐ์๋ฅผ ์นด์ดํธํ ์ ๋ ์๋ค. ํ์ง๋ง ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ์ต๋ 20๋ง์ผ๋ก, O(N^2)์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ํผ๋ค๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก O(N^2) ๋ฏธ๋ง์ผ๋ก ๊ตฌ๊ฐ์ ๊ตฌํ ์ ์๋๋ก, ํฌํฌ์ธํฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ํ์ํ๋ค.
์ต์ฅ ์ฐ์ ๋ถ๋ถ ์์ด์์ ๊ฐ์ ์์๊ฐ K๊ฐ ์ดํ๋ก ๋ค์ด์๋์ง ํ์ธํด์ผ ํ๋ค. ๊ตฌ๊ฐ์ ์์์ ๊ณผ ๋์ ์ ๋ชจ๋ 0๋ฒ์งธ์์ ์์ํด, ์์์ ๊ฐ์์ ๋ฐ๋ผ ํฌ์ธํฐ๋ฅผ ์ด๋ํด์ฃผ๋ฉด ๋๋ค.
- ์์ ๋ณ ๊ฐ์ ์ ์ฅํ๊ธฐ
intํ์ ๋ฐฐ์ด์ ์ ์ธํด, ํด๋น ์์๋ฅผ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋กํ๊ณ , ํด๋น ๊ฐ์๋ ๊ฐ์๋ฅผ ์ ์ฅํด์ค๋ค. ๋ฌธ์ ์์ 100000 ์ดํ์ ์์ ์ ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ด๋ผ๊ณ ํ์ผ๋ฏ๋ก, 100001 ๊ธธ์ด์ ๋ฐฐ์ด์ ์ ์ธํด์ฃผ๋ฉด ๋๋ค.
- ํฌํฌ์ธํฐ
์ฒ์์๋ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ฅผ ํ๋์ฉ ๋๋ ค๊ฐ๋ฉฐ, ์์์ ๊ฐ์์ ๋ฐ๋ผ ์ผ์ชฝ ํฌ์ธํฐ๋ฅผ ๋๋ ค์คฌ๋ค. ์ผ์ชฝ ํฌ์ธํฐ ์กฐ์ ์ด ๋๋๊ณ ๋๋ฉด, ๊ตฌ๊ฐ์ ๊ธธ์ด๋ฅผ ๊ณ์ฐํด max ๊ฐ์ ๊ฐฑ์ ํด์ฃผ์๋ค. ํ์ง๋ง ๋ชจ๋ ํ ์คํธ์ผ์ด์ค๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ค.
int[] count = new int[1000001];
int right = 0;
int max = 0;
for(int left = 0; left < N; left++) {
while(right < N && count[arr[right]] < K) {
count[arr[right]]++;
right++;
}
max = Math.max(max, right - left);
count[arr[left]]--;
}
๋ฐ๋ก
10 3
1 1 1 2 2 1 1 1 1 1
output : 5
๋ฐ๋๋ก ์ผ์ชฝ ํฌ์ธํฐ๋ฅผ ํ๋์ฉ ๋๋ ค๊ฐ๋ฉฐ, ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ ์์์ ๊ฐ์์ ๋ฐ๋ผ ๋๋ ค์คฌ๋ค. ์ด๋ ๊ฒ ํ๋๋ ๋ชจ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ํต๊ณผํ๋ค.
์ฝ๋
package algorithm;
import java.io.*;
import java.util.*;
public class BOJ_๊ฒน์น๋๊ฑด์ซ์ด {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken()); //๋ฐฐ์ด์ ๊ธธ์ด
int K = Integer.parseInt(st.nextToken()); //๊ฐ๋ฅํ ๊ฐ์ ์ ์์ ๊ฐ์
int[] arr = new int[N];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
//๊ตฌํ
int[] count = new int[1000001]; //์์๋ณ ๊ฐ์ ์ ์ฅ
int right = 0;
int max = 0; //์ ๋ต: ์ต์ฅ ์ฐ์ ๋ถ๋ถ ์์ด์ ๊ธธ์ด
for(int left = 0; left < N; left++) { //์ผ์ชฝ์ ํ๋์ฉ ์ฎ๊น
while(right < N && count[arr[right]] < K) { //K๊ฐ ๋ฏธ๋ง์ผ๋๊น์ง ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊น
count[arr[right]]++;
right++;
}
max = Math.max(max, right - left); //์ต๋๊ฐ ๊ฐฑ์
count[arr[left]]--; //์ผ์ชฝ ์์์ ์ ๋นผ์ฃผ๊ธฐ
}
System.out.println(max);
}
}
๊ฒฐ๊ณผ
๋ฐฐ์ด์
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค 14846๋ฒ : ์ง์ฌ๊ฐํ๊ณผ ์ฟผ๋ฆฌ (0) | 2024.01.12 |
---|---|
๋ฐฑ์ค 11660๋ฒ : ๊ตฌ๊ฐ ํฉ ๊ตฌํ๊ธฐ5 (0) | 2024.01.12 |
๋ฐฑ์ค 1253๋ฒ : ์ข๋ค (0) | 2024.01.09 |
๋ฐฑ์ค 16234๋ฒ : ์ธ๊ตฌ ์ด๋ (0) | 2023.09.25 |
๋ฐฑ์ค 1261๋ฒ : ์๊ณ ์คํ (0) | 2023.09.16 |