20437번: 문자열 게임 2백준/문제2024. 3. 8. 13:29
Table of Contents
문제 출처 : https://www.acmicpc.net/problem/20437
언어 : Kotlin
문제 설명 :
작년에 이어 새로운 문자열 게임이 있다. 게임의 진행 방식은 아래와 같다.
알파벳 소문자로 이루어진 문자열 W가 주어진다.
양의 정수 K가 주어진다.
어떤 문자를 정확히 K개를 포함하는 가장 짧은 연속 문자열의 길이를 구한다.
어떤 문자를 정확히 K개를 포함하고, 문자열의 첫 번째와 마지막 글자가 해당 문자로 같은 가장 긴 연속 문자열의 길이를 구한다.
위와 같은 방식으로 게임을 T회 진행한다.
입력 :
문자열 게임의 수 T가 주어진다. (1 ≤ T ≤ 100)
다음 줄부터 2개의 줄 동안 문자열 W와 정수 K가 주어진다. (1 ≤ K ≤ |W| ≤ 10,000)
출력 :
T개의 줄 동안 문자열 게임의 3번과 4번에서 구한 연속 문자열의 길이를 공백을 사이에 두고 출력한다.
만약 만족하는 연속 문자열이 없을 시 -1을 출력한다.
제한 사항 :
- 시간 제한 : 1초
- 메모리 제한 : 1024MB
입출력 예 :
입력 | 출력 |
2 superaquatornado 2 abcdefghijklmnopqrstuvwxyz 5 |
4 8 -1 |
1 abaaaba 3 |
3 4 |
풀이 :
import java.io.BufferedReader
import java.io.BufferedWriter
import java.io.InputStreamReader
import java.io.OutputStreamWriter
fun main() = with(BufferedReader(InputStreamReader(System.`in`))) {
val bw = BufferedWriter(OutputStreamWriter(System.out))
val t = readLine().toInt()
repeat(t) {
val w = readLine()
val k = readLine().toInt()
val list = Array(26) { mutableListOf<Int>() }
var minL = 10001
var maxL = k - 1
for (i in w.indices) {
val cur = w[i] - 'a'
list[cur].add(i)
if (list[cur].size >= k) {
val length = i - list[cur][list[cur].size - k] + 1
minL = length.coerceAtMost(minL)
maxL = length.coerceAtLeast(maxL)
}
}
bw.appendLine(if (minL == 10001) "-1" else "$minL $maxL")
}
bw.flush()
bw.close()
}
'백준 > 문제' 카테고리의 다른 글
13235번: 팰린드롬 (0) | 2024.03.11 |
---|---|
26068번: 치킨댄스를 추는 곰곰이를 본 임스 2 (0) | 2024.03.08 |
10173번: 니모를 찾아서 (0) | 2024.03.08 |
16171번: 나는 친구가 적다 (Small) (0) | 2024.03.07 |
10930번: SHA-256 (0) | 2024.03.07 |
@스몰스테핑 :: 작은 발걸음
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!