Skip to content

Commit 628def7

Browse files
committed
[Gold IV] Title: 괄호, Time: 76 ms, Memory: 69100 KB -BaekjoonHub
1 parent 66b448a commit 628def7

2 files changed

Lines changed: 46 additions & 0 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# [Gold IV] 괄호 - 10422
2+
3+
[문제 링크](https://www.acmicpc.net/problem/10422)
4+
5+
### 성능 요약
6+
7+
메모리: 69100 KB, 시간: 76 ms
8+
9+
### 분류
10+
11+
수학, 다이나믹 프로그래밍, 조합론
12+
13+
### 제출 일자
14+
15+
2025년 7월 28일 10:21:35
16+
17+
### 문제 설명
18+
19+
<p>‘(‘, ‘)’ 문자로만 이루어진 문자열을 괄호 문자열이라 한다. 올바른 괄호 문자열이란 다음과 같이 정의된다. ()는 올바른 괄호 문자열이다. S가 올바른 괄호 문자열이라면, (S)도 올바른 괄호 문자열이다. S와 T가 올바른 괄호 문자열이라면, 두 문자열을 이어 붙인 ST도 올바른 괄호 문자열이다. (()())()은 올바른 괄호 문자열이지만 (()은 올바른 괄호 문자열이 아니다. 괄호 문자열이 주어졌을 때 올바른 괄호 문자열인지 확인하는 방법은 여러 가지가 있다.</p>
20+
21+
<p>하지만 우리가 궁금한 것은 길이가 L인 올바른 괄호 문자열의 개수이다. 길이 L이 주어졌을 때 길이가 L인 서로 다른 올바른 괄호 문자열의 개수를 출력하는 프로그램을 만들어 보자.</p>
22+
23+
### 입력
24+
25+
<p>첫 번째 줄에 테스트케이스의 개수를 나타내는 T (1 ≤ T ≤ 100)가 주어진다. 두 번째 줄부터 각 테스트케이스마다 괄호 문자열의 길이를 나타내는 L이 주어진다. (1 ≤ L ≤ 5000) </p>
26+
27+
### 출력
28+
29+
<p>각 테스트 케이스에 대해 길이가 L인 올바른 괄호 문자열의 개수를 1,000,000,007로 나눈 나머지를 출력하시오.</p>
30+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
let t = Int(String(readLine()!))!
2+
var dp = Array(repeating: 0, count: 5001)
3+
dp[0] = 1
4+
dp[2] = 1
5+
for n in stride(from: 4, through: 5000, by: 2) {
6+
for i in stride(from: 2, through: n, by: 2){
7+
dp[n] += dp[i - 2] * dp[n - i]
8+
dp[n] %= 1000000007
9+
}
10+
11+
}
12+
13+
for _ in 0..<t{
14+
let a = Int(String(readLine()!))!
15+
print(dp[a])
16+
}

0 commit comments

Comments
 (0)