https://www.acmicpc.net/problem/20437
나의풀이
import java.util.*;
import java.io.*;
public class Main {
static List<Integer>[] alpha= new ArrayList[26];
static int min= 10001, max=0 ,k=0;
public static void main(String args[]) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int t= Integer.parseInt(st.nextToken());//게임의 개수
for(int i=0; i<t; i++){
min= 10001; max=0;
String w= br.readLine(); //소문자로 이루어진 문자열
k = Integer.parseInt(br.readLine()); //양의정수 k
for(int j=0; j< 26; j++){
alpha[j] = new ArrayList<>();
}
for(int k=0; k< w.length() ; k++){
char temp = w.charAt(k);
alpha[temp - 'a'].add(k); //각 알파벳이 몇번째 인덱스에 있는지
}
for(int a=0; a< 26; a++){
if(alpha[a].size() >= k){//k보다 많이 있는 알파벳에 대해서만 투포인터
twoPointer(a);
}
}
if(min == 10001){
bw.write("-1 \n");
}else{
bw.write(min+" "+max+"\n");
}
}
bw.flush();
br.close();
bw.close();
}
public static void twoPointer(int i){
List<Integer> list = alpha[i];//해당 알파벳이 위치한 인덱스들
int start=0, end=0;
while(end < list.size()){
if(end-start+1 == k){//해당 알파벳이 딱 k개만 있을때
min = Math.min(min, list.get(end)-list.get(start)+1);
max = Math.max(max, list.get(end)-list.get(start)+1);
}
end++;//종료점을 증가
while(end-start+1 > k ){//해당 알파벳이 k개보다 많으면 시작점을 증가
start++;
}
}
}
}
'코테풀이' 카테고리의 다른 글
[백준] BOJ - 2110 공유기 설치 자바 JAVA (골드 4) (0) | 2023.03.20 |
---|---|
[백준] BOJ - 16234 인구 이동 자바 java(골드5) (0) | 2023.03.20 |
[백준] BOJ - 5972 택배 배송 자바 java (골드5) (0) | 2023.03.13 |
[백준] BOJ - 14719 빗물 java 자바 (골드5) (0) | 2023.03.13 |
[백준] BOJ - 20922 겹치는 건 싫어 자바 java (실버 1) (0) | 2023.03.12 |