그냥 하는 노트와 메모장

BOJ 17428 K번째 괄호 문자열 본문

Solved problems

BOJ 17428 K번째 괄호 문자열

coloredrabbit 2020. 6. 4. 10:50

* BOJ 17428 K번째 괄호 문자열

[분류 : 다이나믹 프로그래밍]


[풀이]

  올바른 괄호 문자열이 몇 개 있을 수 있는지 생각해보자. 당연히 이 문제를 풀어본 사람은 카탈란 수를 떠올릴 수 있을거고, 아니더라도 아래 점화식을 떠올릴 수 있다.


  하지만 이런 방식은 사전순에 대한 처리를 할 수 없어진다.


  보다 간단하게 생각해보자. 현재 위치에서 어떤 괄호를 쓸 것인지를 생각해보자. 단 지금까지 구성해온 문자열에서 모두 쓸 수 있는 것은 아니다. '('과 ')' 수가 똑같을뿐만 아니라 왼쪽에서 오른쪽으로 순회할 때 ')' 수가 '(' 수보다 많지 않도록 구성해야 한다.

  따라서 정의해야 하는 함수는 현재 위치 p에서 '('가 ')'보다 r만큼 많을 때 나올 수 있는 올바른 괄호 문자열의 수를 반환하도록  한다. 또 '('을 사용했을 때의 수와 ')'을 사용했을 때의 수를 분리하여 언제 K번째가 나올 수 있는지 추적할 수 있도록 dp를 구성해주면됩니다.


rec(p, r) = 현재 위치 p에서 '('가 ')'보다 r만큼 많을 때 나올 수 있는 올바른 괄호 문자열의 수



'Solved problems' 카테고리의 다른 글

BOJ 12861 죄수에게 주는 뇌물  (0) 2020.06.08
BOJ 1023 괄호 문자열  (1) 2020.06.04
BOJ 3001 이상한 문제  (0) 2020.06.03
BOJ 16876 재미있는 숫자 게임  (0) 2020.05.28
BOJ 2543 초고속철도  (0) 2020.05.28
Comments