반응형
https://www.acmicpc.net/problem/16472
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 512 MB | 686 | 301 | 236 | 44.782% |
문제
고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고양이의 언어로, 고양이의 언어를 사람의 언어로 바꾸어 주는 희대의 발명품이 될 것이다.
현재 고양이말 번역기의 베타버전이 나왔다. 그러나 이 베타버전은 완전 엉망진창이다. 베타버전의 번역기는 문자열을 주면 그 중에서 최대 N개의 종류의 알파벳을 가진 연속된 문자열밖에 인식하지 못한다. 굉장히 별로지만 그나마 이게 최선이라고 사람들은 생각했다. 그리고 문자열이 주어졌을 때 이 번역기가 인식할 수 있는 최대 문자열의 길이는 얼마인지가 궁금해졌다.
고양이와 소통할 수 있도록 우리도 함께 노력해보자.
입력
첫째 줄에는 인식할 수 있는 알파벳의 종류의 최대 개수 N이 입력된다. (1 < N ≤ 26)
둘째 줄에는 문자열이 주어진다. (1 ≤ 문자열의 길이 ≤ 100,000) 단, 문자열에는 알파벳 소문자만이 포함된다.
출력
첫째 줄에 번역기가 인식할 수 있는 문자열의 최대길이를 출력한다.
예제 입력 1
2
abbcaccba
예제 출력 1
4
코드
/*
고냥이
연속된 문자열 -> 투포인터!!!
*/
import java.io.*;
import java.util.*;
public class p16472 {
static int n;
static String s;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
s = br.readLine();
int[] check = new int[26];
int lo = 0, hi = 0, max = 0, cnt = 0;
check[s.charAt(0) - 'a']++;
cnt++;
while (true) {
hi++;
// 종료조건 : 오른쪽 포인터가 문자 길이를 초과 했을 경우
if (hi == s.length()) break;
int num = s.charAt(hi) - 'a';
check[num]++;
// 새로운 문자가 추가
if (check[num] == 1) {
cnt++;
}
while (cnt > n) {
int num2 = s.charAt(lo) - 'a';
check[num2]--;
// 해당 문자는 더이상 존재하지 않음
if (check[num2] == 0) {
cnt--;
}
lo++;
}
max = Math.max(max, hi - lo + 1);
}
System.out.println(max);
}
}
반응형
'알고리즘 > [ Baekjoon ]' 카테고리의 다른 글
[ BOJ ][JAVA][11066] 파일 합치기 (0) | 2021.07.27 |
---|---|
[ BOJ ][JAVA][3055] 탈출 (0) | 2021.07.27 |
[ BOJ ][JAVA][1043] 거짓말 (0) | 2021.06.28 |
[ BOJ ][JAVA][6236] 용돈관리 (0) | 2021.06.24 |
[ BOJ ][JAVA][15658] 연산자 끼워넣기 (2) (0) | 2021.06.22 |