Java

[백준 20437] 문자열 게임2 (JAVA)

iheeeee6-6 2023. 4. 25. 17:36
728x90

https://www.acmicpc.net/problem/20437

 

20437번: 문자열 게임 2

첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한다.

www.acmicpc.net

 

알파벳별로 개수를 저장한 다음,  k개 미만인 경우에는 확인하지 않도록 한다!

그리고 k가 1일 경우의 예외처리를 해줘야 한다는 점을 주의!!

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt(br.readLine());

		for (int i = 0; i < t; i++) {
			String str = br.readLine();
			int[] alpha = new int[26];// 알파벳별로 개수를 저장한다.
			for (int j = 0; j < str.length(); j++) {
				alpha[str.charAt(j) - 'a']++;
			}

			int k = Integer.parseInt(br.readLine());
			if (k == 1) {
				System.out.println("1 1");
				continue;
			}

			int min = Integer.MAX_VALUE;
			int max = Integer.MIN_VALUE;
			for (int j = 0; j < str.length(); j++) {
				if (alpha[str.charAt(j) - 'a'] < k)
					continue;

				int count = 1;
				for (int z = j + 1; z < str.length(); z++) {
					if (str.charAt(z) == str.charAt(j))
						count++;
					if (count == k) {
						min = Math.min(min, z - j + 1);
						max = Math.max(max, z - j + 1);
						break;
					}
				}

			}

			if (min == Integer.MAX_VALUE && max == Integer.MIN_VALUE) {
				System.out.println(-1);
			} else {
				System.out.println(min + " " + max);
			}
		}

	}

}

'Java' 카테고리의 다른 글

[백준 1138] 한 줄로 서기 (JAVA)  (0) 2023.04.26
[백준 13549] 숨바꼭질 3 (JAVA)  (0) 2023.04.25
[백준 1446] 지름길 (JAVA)  (0) 2023.04.24
[백준 22233] 가희와 키워드 (JAVA)  (0) 2023.04.23
[백준 14940] 쉬운 최단거리(JAVA)  (0) 2023.04.23