[BOJ] 15926번: 현욱은 괄호왕이야!!

https://www.acmicpc.net/problem/15926


substring이 아닌, 그냥 주어진 괄호쌍 전체가 올바른 괄호쌍인지 확인하는 문제는 굉장히 익숙할 것입니다. 이제 substring에 대해서 생각해보면, 특정 시작점 i에서 진행할 때 최대한 올바른 괄호쌍을 늘이려면 어떻게 해야하는지를 생각해봅시다.


예제로 주어진 ( ( ) ) ( 에 대해, ( 는 +1, )는 -1을 부여해보면 0 1 2 1 0 1 이라는 값을 얻을 수 있습니다. 우리는 이 때 0 1 2 1 0이 최대 구간이 되고 1 2 1 0 1은 최대 구간이 될 수 없음을 알 수 있는데, 1 2 1 0 1은 시작점 1보다 낮아진 값(0)이 등장했기 떄문입니다.


이제 문자를 하나씩 보면서 진행합니다. 진행하면서 현재의 값을 index로 저장합니다. 그리고 )이 나오면 바로 직전에 저장한 index를 제거합니다.


초기값 : val 0 -> index 0

(

val 0 -> index 0

val 1 -> index 1


( (

val 0 -> index 0

val 1 -> index 1

val 2 -> index 2

( ( )

val 0 -> index 0

val 1 -> index 1. 현재 index가 3이고 val이 1이므로 3-1 = 2를 최댓값에 저장


( ( ) )

val 0 -> index 0. 현재 index가 4이고 val이 0이므로 4-0 = 4를 최댓값에 저장


( ( ) ) )

val -1 -> index 5.


뭐 이런식으로요. 설명이 쉽지않네요 ㅠ_ㅠ


https://github.com/blisstoner/BOJ/blob/master/15926.cpp

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 13945번: Appearance Analysis  (0) 2018.08.17
[BOJ] 1822번: 차집합  (0) 2018.08.17
[BOJ] 1756번: The Disks  (0) 2018.08.17
[BOJ] 3673번: Divisible Subsequences  (0) 2018.08.16
[BOJ] 9077번: 지뢰제거  (1) 2018.08.16
[BOJ] 1687번: 행렬 찾기  (0) 2018.08.16
  Comments