목차

Balanced Sequence

ps
링크acmicpc.net/…
출처BOJ
문제 번호18978
문제명Balanced Sequence
레벨플래티넘 1
분류

그리디

시간복잡도O(nlogn + ∑s)
인풋사이즈n<=10^5, ∑s<=10^5
사용한 언어Python 3.13
제출기록47332KB / 372ms
최고기록372ms
해결날짜2026/03/19

풀이

코드

"""Solution code for "BOJ 18978. Balanced Sequence".

- Problem link: https://www.acmicpc.net/problem/18978
- Solution link: http://www.teferi.net/ps/problems/boj/18978

Tags: [greedy]
"""

import operator
from teflib import io as tio


@tio.run_n_times
def main():
    _n, s = tio.read_str_lines()

    down, up = [], []
    for s_i in s:
        down_count = up_count = 0
        for c in s_i:
            if c == '(':
                up_count += 1
            else:
                if up_count > 0:
                    up_count -= 1
                else:
                    down_count += 1
        if up_count >= down_count:
            up.append((down_count, up_count))
        else:
            down.append((down_count, up_count))

    up.sort(key=operator.itemgetter(0))
    down.sort(key=operator.itemgetter(1), reverse=True)
    psum = min_psum = 0
    for d, u in up + down:
        psum -= d
        min_psum = min(min_psum, psum)
        psum += u

    answer = sum(len(s_i) for s_i in s) - psum + min_psum * 2
    print(answer)


if __name__ == '__main__':
    main()