알고리즘/투 포인터
[BOJ 16472] 고냥이 (Java, 투포인터)
leejinwoo1126
2023. 6. 6. 11:28
반응형
문제 링크
https://www.acmicpc.net/problem/16472
16472번: 고냥이
고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고
www.acmicpc.net
풀이
- 알파벳(26자) 카운팅 배열을 활용하여 투포인터 문제 풀이
- 시간복잡도는 O(N)
*알파벳 인덱스 구하기
int index = TEXT.char(i) - 'a';
제출 코드
import java.util.*;
import java.io.*;
public class Main {
static int N, CNT;
static String TEXT;
static int[] ALPHABET = new int[26];
static void input() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
TEXT = st.nextToken();
}
static void add(int i) {
int idx = TEXT.charAt(i) - 'a';
ALPHABET[idx] += 1;
if(ALPHABET[idx] == 1) CNT += 1;
}
static void remove(int i) {
int idx = TEXT.charAt(i) - 'a';
ALPHABET[idx] -= 1;
if(ALPHABET[idx] == 0) CNT -= 1;
}
static void pro() {
int ans = 0; // ans : 최대 길이
for(int L = 0, R = 0; R < TEXT.length(); R++) {
add(R);
while(CNT > N) {
remove(L);
L += 1;
}
ans = Math.max(ans, R - L + 1);
}
System.out.println(ans);
}
public static void main(String[] args) throws Exception {
input();
pro();
}
}
반응형