👩‍💻 코테 공부/코테 공부

[코테 - Kotlin] 백준 1522번 문자열 교환

수댕ʕت̫͡ʔ 2024. 7. 10. 15:48

1. 문제

 

a와 b로만 이루어진 문자열이 주어질 때,  a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오.

이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해 있는 것이다.

예를 들어,  aabbaaabaaba이 주어졌을 때, 2번의 교환이면 a를 모두 연속으로 만들 수 있다.

2. 입력

첫째 줄에 문자열이 주어진다. 문자열의 길이는 최대 1,000이다.

3. 출력

첫째 줄에 필요한 교환의 회수의 최솟값을 출력한다.

예제 입력 1 

abababababababa

예제 출력 1 

3

예제 입력 2 

ba

예제 출력 2 

0
 

 

0
 
2
 

4. 내가 푼 답안

import java.io.BufferedReader
import java.io.InputStreamReader
import kotlin.math.min

fun main() {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val data = br.readLine().toMutableList()
    val count = data.count{it == 'a'}
    val extendedData = data + data
    var min_n = 1e9
    for (i in 0 until data.size) {
        val a = i
        val b = i + count
        val temp = extendedData.subList(a, b).count{it == 'b'}
        min_n = min(temp.toDouble(), min_n)
    }
    println(min_n.toInt())
}

 

 

이번 문제는 재밌기도하고, 배울것이 많은 문제였다.

슬라이딩 윈도우를 사용해서 최소의 값을 업데이트해주는 것!

 

참고

'👩‍💻 코테 공부 > 코테 공부' 카테고리의 다른 글

[코테 - py] 숫자 카드 나누기  (1) 2024.07.24
[코테 - py] 뒤에 있는 큰 수 찾기  (0) 2024.07.22
[Kotlin] 문법 정리  (0) 2024.06.30
[코테 - py] 12904번 A와 B  (0) 2024.06.01
[코테 - py] 5430번 AC  (0) 2024.06.01