Lewis's Tech Keep

[BOJ][16472] 고냥이 - JAVA 본문

Java/알고리즘

[BOJ][16472] 고냥이 - JAVA

Lewis Seo 2021. 6. 27. 18:37

링크 : https://www.acmicpc.net/problem/16472

 

16472번: 고냥이

고양이는 너무 귀엽다. 사람들은 고양이를 너무 귀여워했고, 결국 고양이와 더욱 가까워지고 싶어 고양이와의 소통을 위한 고양이 말 번역기를 발명하기로 했다. 이 번역기는 사람의 언어를 고

www.acmicpc.net

 

참고 링크 : https://velog.io/@pss407/%EB%B0%B1%EC%A4%8016472-%EA%B3%A0%EB%83%A5%EC%9D%B4

 

 

- 풀이

 : 투 포인터 문제

 : 투 포인터의 힌트 : 어떤 한 배열에서의 길이가 최대가 되는 어떤 것을 구해야 함

 

- 후기 & 피드백

 : 처음에 투 포인터인 것을 알아채기까지 시간이 좀 걸렸고 이후 현재 답 로직과 비슷하게 썼는데 한번에 start를 모두 체크를 하지 않으니 또 답이 틀린 경우가 있었다. 투 포인터 움직일 때 계속 n에서 돌기보다 end 옮긴 후 start를 한번에 다 옮기는 것이 훨씬 좋겠다.

 

 

더보기
import java.util.Arrays;
import java.util.Scanner;

public class Solution {

    public static void main(String args[]) {
        int answer = 1;
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine());
        String s = sc.nextLine();
        int[] check = new int[26];
        int start = 0;
        int end = 0;
        int count = 0;
        while (end < s.length()) {
            int num = s.charAt(end) - 'a';
            check[num]++;
            if (check[num] == 1) count++;
            end++;
            while (count > n) {
                int numStart = s.charAt(start) - 'a';
                check[numStart]--;
                if (check[numStart] == 0) count--;
                start++;
            }

            answer = Math.max(answer, end - start);
        }

        System.out.println(answer);

    }
}
Comments