๐Ÿƒ๐Ÿปโ€โ™€๏ธ[์ปค๋ฎค๋Ÿฌ๋‹/1๊ธฐ] 2์ฃผ์ฐจB - DFS

์ด๋‚˜์˜ยท2021๋…„ 11์›” 10์ผ
0

์ปค๋ฎค๋Ÿฌ๋‹1๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
7/8
post-thumbnail

๐ŸŽฏ2์ฃผ์ฐจB "์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ์˜ ๊ฐœ์ˆ˜"

๐ŸŽƒ๋ฌธ์ œ์„ค๋ช…

๐Ÿฌ์˜ฌ๋ฐ”๋ฅธ ๊ด„ํ˜ธ๋ž€ (())๋‚˜ ()์™€ ๊ฐ™์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ชจ๋‘ ๋‹ซํžŒ ๊ด„ํ˜ธ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. )(๋‚˜ ())() ์™€ ๊ฐ™์€ ๊ด„ํ˜ธ๋Š” ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ด„ํ˜ธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๊ด„ํ˜ธ ์Œ์˜ ๊ฐœ์ˆ˜ n์ด ์ฃผ์–ด์งˆ ๋•Œ, n๊ฐœ์˜ ๊ด„ํ˜ธ ์Œ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ๊ด„ํ˜ธ ๋ฌธ์ž์—ด์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ solution์„ ์™„์„ฑํ•ด ์ฃผ์„ธ์š”.


๐Ÿ”’์ œํ•œ์‚ฌํ•ญ

๊ด„ํ˜ธ ์Œ์˜ ๊ฐœ์ˆ˜ N : 1 โ‰ค n โ‰ค 14, N์€ ์ •์ˆ˜

๐Ÿ’พ์ž…์ถœ๋ ฅ ์˜ˆ

nresult
22
35

์ž…์ถœ๋ ฅ ์˜ˆ #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๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
โœ”๏ธํ’€์ด๋ฐฉ๋ฒ•

  1. ์—ด๋ฆฌ๋Š” ๊ด„ํ˜ธ๋ฅผ ๋ฐฐ์น˜ํ•œ๋‹ค.
  2. ๊ทธ ์ดํ›„์— ๋‹ซํžˆ๋Š” ๊ด„ํ˜ธ๋ฅผ ๋ฐฐ์น˜ํ•œ๋‹ค.
  3. ๊ด„ํ˜ธ๋Š” N๊ฐœ ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  4. ์—ด๋ฆฌ๊ธฐ ์ „์— ๋‹ซํžˆ๋Š” ๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
    => ๋‹ซํžˆ๋Š” ๊ด„ํ˜ธ์˜ ๊ฐœ์ˆ˜๋Š” ์—ด๋ฆฌ๋Š” ๊ด„ํ˜ธ์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ํด ์ˆ˜ ์—†๋‹ค.

โœ๐Ÿป๊ฐ•์˜ ์ฝ”๋“œ

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)

  • ๋น„์„ ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ๋‘ ๋ฐฉ๋ฒ•์˜ ์ฐจ์ด๋Š” ์ˆœ์„œ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ์ ์ด๋‹ค.
  • ์ˆœ์„œ๋ฅผ ๋ฌด์‹œํ•˜๋ฉด ๋‘ ๋ฐฉ๋ฒ•์˜ ๊ฒฐ๊ณผ๋Š” ๋™์ผํ•˜๋‹ค.

๐Ÿ’ก์ฒ˜์Œ์—๋Š” ๋จธ๋ฆฌ๋กœ ์ž˜ ๊ทธ๋ ค์ง€์ง€ ์•Š์•˜์ง€๋งŒ, ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์˜ˆ์‹œ๋ฅผ ์ ์–ด๋ณด๋ฉด์„œ ์ฒ˜์Œ ์ˆœ์„œ๋ฅผ '('๋กœ ์‹œ์ž‘ํ•˜๋ฉด์„œ '('์™€ ')'๋ฅผ ๋ชจ๋‘ ์ฒดํฌํ•˜๋ฉด์„œ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์„ธ์–ด์ฃผ๊ณ  ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž„์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

profile
์†Œํ†ตํ•˜๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€