ps:problems:boj:11899
괄호 끼워넣기
ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 11899 |
문제명 | 괄호 끼워넣기 |
레벨 | 실버 3 |
분류 |
괄호문자열 |
시간복잡도 | O(n) |
인풋사이즈 | n<=50 |
사용한 언어 | Python 3.13 |
제출기록 | 32412KB / 40ms |
최고기록 | 32ms |
해결날짜 | 2025/02/16 |
풀이
- 우선 score(최종점수)와 min_score(최소점수)를 구한다.
- 만약 min_score < 0 이면 올바른 괄호 문자열이 될수 없기 때문에, 0이상이 되게 하기 위해서 맨 앞에 -min_score 만큼의 '('를 추가해야 한다. 이렇게 되면 score 역시 -min_score 만큼 증가한다
- score > 0 이면 올바른 괄호 문자열이 될수 없기 때문에, 맨 뒤에 score만큼의 ')'를 추가해야 한다.
- 식을 정리하면, min_score>=0 일때는 답이 score가 되고, min_score<0 일때는 score - 2*min_score 가 답이 된다.
- 시간복잡도는 O(n)
코드
"""Solution code for "BOJ 11899. 괄호 끼워넣기".
- Problem link: https://www.acmicpc.net/problem/11899
- Solution link: http://www.teferi.net/ps/problems/boj/11899
"""
def main():
S = input()
score = 0
min_score = min(score := score + (1 if x == '(' else -1) for x in S)
print(score - 2 * min(0, min_score))
if __name__ == '__main__':
main()
ps/problems/boj/11899.txt · 마지막으로 수정됨: 2025/02/16 13:35 저자 teferi
토론