Climbing Stairs

ํ•œ๊ตญ์–ด

๋‹น์‹ ์€ ๊ณ„๋‹จ์„ ์˜ค๋ฅด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์ƒ์— ๋„๋‹ฌํ•˜๋ ค๋ฉด nnn ๊ณ„๋‹จ์„ ์˜ฌ๋ผ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๋ฒˆ์— 1๊ณ„๋‹จ ๋˜๋Š” 2๊ณ„๋‹จ์”ฉ ์˜ค๋ฅผ ์ˆ˜ ์žˆ์„ ๋•Œ, ์ •์ƒ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋Š” ๋ช‡ ๊ฐ€์ง€์ธ๊ฐ€์š”?

1. ๋ฌธ์ œ ๋ถ„์„

  • ๊ณ„๋‹จ์„ n ๊ฐœ์˜ ๊ณ„๋‹จ์„ ์˜ฌ๋ผ์•ผํ•จ.

  • ํ•œ ๋ฒˆ์— 1๊ณ„๋‹จ ๋˜๋Š” 2๊ณ„๋‹จ ์˜ค๋ฅผ ์ˆ˜ ์žˆ์Œ.

  • ์ •์ƒ๊นŒ์ง€ ๋„๋‹ฌํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์˜ ์ˆ˜ ๋ฅผ ๊ตฌํ•ด์•ผ ํ•จ.

2. ์ž‘์€ ๊ฒฝ์šฐ๋ถ€ํ„ฐ ์ƒ๊ฐํ•ด ๋ณด๊ธฐ(ํŒจํ„ด ์ฐพ๊ธฐ)

๊ณ„๋‹จ์„ ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•์„ ์ž‘์€ ์ˆซ์ž๋กœ ์ง์ ‘ ์„ธ์–ด๋ณด๋ฉด ๊ทœ์น™์ด ๋ณด์ž„.

์˜ˆ์ œ 1: n = 1

  • ๋ฐฉ๋ฒ•: (1)

    • โ‡’ 1๊ฐ€์ง€ ๋ฐฉ๋ฒ•

์˜ˆ์ œ 2: n = 2

  • ๋ฐฉ๋ฒ•: (1 + 1), (2)

    • โ‡’ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•

์˜ˆ์ œ 3: n = 3

  • ๋ฐฉ๋ฒ•: (1+1+1), (1+2), (2+1) โ†’ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•

์˜ˆ์ œ 4: n = 4

  • ๋ฐฉ๋ฒ•:

    1. (1+1+1+1)

    2. (1+1+2)

    3. (1+2+1)

    4. (2+1+1)

    5. (2+2) โ†’ 5๊ฐ€์ง€ ๋ฐฉ๋ฒ•

3. ์ ํ™”์‹(์žฌ๊ท€์‹) ์ฐพ๊ธฐ

๊ฐ ์ˆซ์ž์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ผ์ •ํ•œ ํŒจํ„ด์ด ๋ณด์ž„.

n

๋ฐฉ๋ฒ•์˜ ์ˆ˜

1

1

2

2

3

3

4

5

5

8

6

13

ํŒจํ„ด ๋ฐœ๊ฒฝ :

  • f(3) = f(2) + f(1) = 2 + 1 = 3

  • f(4) = f(3) + f(2) = 3 + 2 = 5

  • f(5) = f(4) + f(3) = 5 + 3 = 8

โ‡’ ์ฆ‰, ๊ณ„๋‹จ n ๊ฐœ๋ฅผ ์˜ค๋ฅด๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ํ™”์‹์„ ๋”ฐ๋ฆ„

f(n)=f(nโˆ’1)+f(nโˆ’2)f(n) = f(n-1) + f(n-2)

  • f(n-1) : ๋งˆ์ง€๋ง‰์— 1 ๊ณ„๋‹จ ์„ ์˜ฌ๋ž์„ ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜

  • f(n-2) : ๋งˆ์ง€๋ง‰์— 2 ๊ณ„๋‹จ ์„ ์˜ฌ๋ž์„ ๋•Œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜

์ด ์ ํ™”์‹์€ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๊ณผ ๋™์ผํ•œ ๊ตฌ์กฐ์ž„

(๋‹จ, ์ดˆ๊ธฐ๊ฐ’ f(1) = 1, f(2) = 2 )

4. ์™œ ์žฌ๊ท€๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š”๊ฐ€?

  • f(n)=f(nโˆ’1)+f(nโˆ’2)f(n) = f(n-1) + f(n-2) ์ด๋ฏ€๋กœ, n ์„ ๊ตฌํ•˜๋ ค๋ฉด ๋จผ์ € n-1 ๊ณผ n-2 ๋ฅผ ๊ณ„์‚ฐํ•ด์•ผํ•จ.

  • f(nโˆ’1)f(n-1) ์„ ๊ตฌํ•˜๋ ค๋ฉด ๋‹ค์‹œ f(nโˆ’2)f(n-2) ์™€ f(nโˆ’3)f(n-3) ์ด ํ•„์š”ํ•˜๊ณ , ๊ณ„์† ์ชผ๊ฐœ์ง€๊ฒŒ ๋จ.

  • ๋”ฐ๋ผ์„œ, ๋ฌธ์ œ๋ฅผ ์ž‘์€ ๋ฌธ์ œ (n-1 , n-2 ๋“ฑ)๋กœ ์ชผ๊ฐœ์„œ ํ•ด๊ฒฐํ•˜๋Š” "๋ถ„ํ•  ์ •๋ณต(Divide & Conquer)" ํ˜•ํƒœ๊ฐ€ ๋จ.

์žฌ๊ท€ ํ˜ธ์ถœ ๊ตฌ์กฐ ์˜ˆ์‹œ(n = 5 ์ผ ๋•Œ)

climbStairs(5)
โ”œโ”€โ”€ climbStairs(4)
โ”‚   โ”œโ”€โ”€ climbStairs(3)
โ”‚   โ”‚   โ”œโ”€โ”€ climbStairs(2) โ†’ 2
โ”‚   โ”‚   โ”œโ”€โ”€ climbStairs(1) โ†’ 1
โ”‚   โ”‚   โ””โ”€โ”€ ๊ฒฐ๊ณผ: 3
โ”‚   โ”œโ”€โ”€ climbStairs(2) โ†’ 2
โ”‚   โ””โ”€โ”€ ๊ฒฐ๊ณผ: 5
โ”œโ”€โ”€ climbStairs(3)
โ”‚   โ”œโ”€โ”€ climbStairs(2) โ†’ 2
โ”‚   โ”œโ”€โ”€ climbStairs(1) โ†’ 1
โ”‚   โ””โ”€โ”€ ๊ฒฐ๊ณผ: 3
โ””โ”€โ”€ ๊ฒฐ๊ณผ: 8

5. ์žฌ๊ท€ ์ฝ”๋“œ

public class SlimbingStairs{
    public static int climbStairs(int n) {
        if (n == 1) return 1;
        if (n == 2) return 2;
        return climbStairs(n-1) + climbStairs(n - 2);
    }
    
    public static void main(String[] args) {
        System.out.println(climbStairs(5)); // result : 8
    }
}

6. ๋” ๋น ๋ฅธ ๋ฐฉ๋ฒ•(DP)

๋ฐ˜๋ณต๋ฌธ์œผ๋กœ O(n), O(1) ์ตœ์ ํ™”

public class ClimbingStairs {
    public static int climbStairs(int n) {
        if (n == 1) return 1;
        if (n == 2) return 2;
        
        int first = 1;
        int sencond = 2;
        for (int i = 3; i <= n; i++) {
            int third = first + second;
            first = second;
            second = third;
        }
        return second;
    }
    
    public static void main(String[] args) {
        System.out.println(climbStairs(5)); // result : 8
    }
}

Last updated

Was this helpful?