https://www.acmicpc.net/problem/6503
투 포인터
사용한 문자의 개수 n이 N이하일 동안 r++ 하며 탐색
r값을 포함했을 때 n > N이 된다면, r을 포함하지 않고 l 정보를 제외한 후 l++
이 과정을 r이 N에 닿을 때 까지 반복 (이 때 l++해서 최적인 경우는 없으므로 종료)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int N;
public static void main(String[] args) throws IOException {
while ((N = Integer.parseInt(br.readLine())) != 0) {
String s = br.readLine();
int S = s.length();
int l = 0;
int r = 0;
int n = 0;
int word = 0;
int ans = 0;
int[] arr = new int[200];
while (r < S) {
int idx = s.charAt(r);
// r을 늘릴 수 없으면, l을 제외하고 l++;
if (n == N && arr[idx] == 0) {
int prev = s.charAt(l);
arr[prev]--;
if (arr[prev] == 0) {
n--;
}
l++;
word--;
continue;
}
// r을 늘릴 수 있으면, r을 추가하고 r++;
if (arr[idx] == 0) {
n++;
}
arr[idx]++;
word++;
r++;
ans = Math.max(ans, word);
}
System.out.println(ans);
}
}
}
'[백준] PS > Java' 카테고리의 다른 글
[백준 9024] 두 수의 합 - JAVA (0) | 2025.02.07 |
---|---|
[백준 1749] 점수따먹기 - JAVA (1) | 2025.02.06 |
[백준 2118] 두 개의 탑 - JAVA (0) | 2025.02.06 |
[백준 2230] 수 고르기 - JAVA (1) | 2025.02.06 |
[백준 8979] 올림픽 - JAVA (0) | 2025.02.05 |