๐๋ฌธ์ ์ค๋ช
๐ฌ์ฌ๋ฐ๋ฅธ ๊ดํธ๋ (())๋ ()์ ๊ฐ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ชจ๋ ๋ซํ ๊ดํธ๋ฅผ ์๋ฏธํฉ๋๋ค. )(๋ ())() ์ ๊ฐ์ ๊ดํธ๋ ์ฌ๋ฐ๋ฅด์ง ์์ ๊ดํธ๊ฐ ๋ฉ๋๋ค. ๊ดํธ ์์ ๊ฐ์ n์ด ์ฃผ์ด์ง ๋, n๊ฐ์ ๊ดํธ ์์ผ๋ก ๋ง๋ค ์ ์๋ ๋ชจ๋ ๊ฐ๋ฅํ ๊ดํธ ๋ฌธ์์ด์ ๊ฐฏ์๋ฅผ ๋ฐํํ๋ ํจ์ solution์ ์์ฑํด ์ฃผ์ธ์.
๐์ ํ์ฌํญ
๊ดํธ ์์ ๊ฐ์ N : 1 โค n โค 14, N์ ์ ์
๐พ์ ์ถ๋ ฅ ์
n | result |
---|---|
2 | 2 |
3 | 5 |
์ ์ถ๋ ฅ ์ #1
2๊ฐ์ ๊ดํธ์์ผ๋ก [ "(())", "()()" ]์ 2๊ฐ์ง๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์ #2
3๊ฐ์ ๊ดํธ์์ผ๋ก [ "((()))", "(()())", "(())()", "()(())", "()()()" ]์ 5๊ฐ์ง๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
๐๋ฌธ์ ์ดํด ๋ฐ ํ์ด๊ณํ
โ๏ธ์ฌ์ค, ์ฒ์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋๋ ์ด๋ค์์ผ๋ก ํ์ด์ผ ํ ์ง ๊ฐ์ด ์์๋ค. ์ด๋ฏธ ์๋ ๋ฌธ์์ด์ ๊ฒ์ํ๋ ๊ฒ์ด ์๋ ๊ฐ์์ ๋ง๋ ๋ชจ๋ ์์ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์์ผ ํ์ผ๋ฏ๋ก ์ํ์ ํด์ผํ๋? ๋ผ๊ณ ์๊ฐ๋ ํ๋ค.
โ๏ธ์ํ๋ณด๋ค๋ ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด ์์ ๊ฒ ๊ฐ์์ ๊ฒ์์ ํตํด "์นดํ๋ ์(catalan number)" ์์ด์ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ํ์ด ํ ์ ์์์ ์๊ฒ ๋์๋ค.
โ๏ธ"์นดํ๋ ์(catalan number)" ์ ํ์
c[0] == 1, n >= 1
c[n] = c[0]*c[n-1] + c[1]*c[n-2] + ... + c[n-2]*c[1] + c[n-1]*c[0]
โ๏ธ์ฐธ๊ณ ๋งํฌ : https://suhak.tistory.com/77
โ๐ป๋ด ์ฝ๋
class Solution {
public int solution(int n) {
int[] catalan = new int[n+1];
// ์นดํ๋ ์ ์ ํ์ ์ด์ฉ
catalan[0] = 1;
for(int i=1; i<=n; i++) {
for(int j=0; j<i; j++) {
catalan[i] += catalan[j]*catalan[i-j-1];
}
}
return catalan[n];
}
}
๐ญ๊ฐ์๋ด์ฉ
โ๏ธ๋ชจ๋ ์ผ์ด์ค๋ฅผ ๋ค ์ํํ๋ฉด์ ์กฐ๊ฑด์ ๋ง๋ ๊ฒฝ์ฐ๋ง ์ธ์ค๋ค.
โ๏ธ์ ํ ๊ตฌ์กฐ์ ํ์๋ฒ ์ค (BFS/DFS) DFS๋ฅผ ์ด์ฉํ ์ ์๋ค.
โ๏ธํ์ด๋ฐฉ๋ฒ
โ๐ป๊ฐ์ ์ฝ๋
import java.util.*;
class Solution {
class P {
int open, close;
P(int open, int close) { // ์์ฑ์
this.open = open;
this.close = close;
}
}
public int solution(int n) {
int answer = 0;
// Queue<P> queue = new LinkedList<>();
Stack<P> stack = new Stack<>();
stack.push(new P(0,0)); // ์์๊ฐ
while(!stack.isEmpty()) {
P p = stack.pop();
if(p.open > n) continue;
if(p.open < p.close) continue;
if(p.open + p.close == 2*n) {
answer++;
continue;
}
stack.push(new P(p.open+1, p.close)); // ์ด๋ฆฌ๋ ๊ดํธ
stack.push(new P(p.open, p.close+1)); // ๋ซํ๋ ๊ดํธ
}
return answer;
}
}
โ๏ธStack
๋์ Queue
๋ฅผ ์ด์ฉํด๋ ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
๐ก๊ฐ์ Tip
๋๋น์ฐ์ ํ์(BFS)/๊น์ด์ฐ์ ํ์(DFS)
- ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ
- ๋ ๋ฐฉ๋ฒ์ ์ฐจ์ด๋ ์์๊ฐ ๋ค๋ฅด๋ค๋ ์ ์ด๋ค.
- ์์๋ฅผ ๋ฌด์ํ๋ฉด ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ๊ณผ๋ ๋์ผํ๋ค.
๐ก์ฒ์์๋ ๋จธ๋ฆฌ๋ก ์ ๊ทธ๋ ค์ง์ง ์์์ง๋ง, ๊ฐ์๋ฅผ ๋ณด๊ณ ์์๋ฅผ ์ ์ด๋ณด๋ฉด์ ์ฒ์ ์์๋ฅผ '('๋ก ์์ํ๋ฉด์ '('์ ')'๋ฅผ ๋ชจ๋ ์ฒดํฌํ๋ฉด์ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์ธ์ด์ฃผ๊ณ ์๋ ๋ฐฉ๋ฒ์์ ์ ์ ์์๋ค.