본문 바로가기
LeetCode/Array & Hashing

[LeetCode][Kotlin] 1963. Minimum Number of Swaps to Make the String Balanced

by jinwo_o 2024. 8. 28.

1963. Minimum Number of Swaps to Make the String Balanced

You are given a 0-indexed string s of even length n. The string consists of exactly n / 2 opening brackets '[' and n / 2 closing brackets ']'.

A string is called balanced if and only if:

  • It is the empty string, or
  • It can be written as AB, where both A and B are balanced strings, or
  • It can be written as [C], where C is a balanced string.

You may swap the brackets at any two indices any number of times.

Return the minimum number of swaps to make balanced.

짝수 길이 n의 0 인덱스 문자열 s가 제공됩니다. 문자열은 정확히 n/2개의 여는 괄호 '['와 n/2개의 닫는 괄호 ']'로 구성됩니다. 

다음과 같은 경우에만 문자열을 균형이라고 합니다. 
- 빈 문자열이거나 
- A와 B가 모두 균형을 이루는 문자열인 AB로 작성할 수 있습니다. 
- [C]로 쓸 수 있습니다. 여기서 C는 균형 잡힌 문자열입니다. 

두 인덱스의 대괄호는 여러 번 바꿀 수 있습니다. 

s를 균형있게 만들기 위한 최소 스왑 수를 반환합니다.

 

Example 1:

Input: s = "][]["

Output: 1

Explanation: You can make the string balanced by swapping index 0 with index 3.

The resulting string is "[[]]".

 

Example 2:

Input: s = "]]][[["

Output: 2

Explanation: You can do the following to make the string balanced:

- Swap index 0 with index 4. s = "[]][][".

- Swap index 1 with index 5. s = "[[][]]".

The resulting string is "[[][]]".

 

Example 3:

Input: s = "[]"

Output: 0

Explanation: The string is already balanced.

 

Constraints:

  • n == s.length
  • 2 <= n <= 10^6
  • n is even.
  • s[i] is either '[' or ']'.
  • The number of opening brackets '[' equals n / 2, and the number of closing brackets ']' equals n / 2.

코드

  • 최소 스왑 수는 이미 균형을 이루는 괄호를 제외한 불균형을 이루는 괄호의 수에서 1을 더하고, 2를 나눈 값과 같다.
class Solution {
    fun minSwaps(s: String): Int {
        var closed = 0
        for (c in s) {
            if (c == '[') closed++
            else if (closed > 0) closed--
        }
        return (closed + 1) / 2
    }
}