알고리즘/투 포인터

[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();
    }
    
}
반응형