๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿบ ๋งค์ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค - ํƒ€์ผ ์žฅ์‹๋ฌผ

๋ฌธ์ œ

  • ์•ต๋ฌด์กฐ๊ฐœ์˜ ๋‚˜์„  ๋ชจ์–‘์ฒ˜๋Ÿผ ์ƒ๊ธด ํƒ€์ผ์ด ๋ถ™์–ด์žˆ๋‹ค. ํƒ€์ผ์ด N๊ฐœ์ผ๋•Œ ๋‘˜๋ ˆ์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋ผ.

 

์ œํ•œ์‚ฌํ•ญ

  • 1 <= N <= 80

์˜ˆ์ œ

์•ต๋ฌด์กฐ๊ฐœ ๋ชจ์–‘์˜ ํƒ€์ผ

ํƒ€์ผ [1, 1, 2, 3, 5]๊ฐ€ ๋ถ™์–ด ์žˆ๋Š” ๊ณณ์˜ ๋‘˜๋ ˆ๋Š” ๋นจ๊ฐ„ ์„ ์œผ๋กœ ํ‘œํ˜„๋˜์–ด์žˆ๋‹ค.

๋นจ๊ฐ„์„ ์œผ๋กœ ํ‘œํ˜„๋œ ๋‘˜๋ ˆ์˜ ๊ธธ์ด๋Š” 26์ด๋‹ค.

 

 

๋ฌธ์ œํ’€์ด

  1. ๊ฐ€์žฅ ํฐ ๋‘ ์ˆซ์ž๋ฅผ ์•Œ๋ฉด ๋‘˜๋ ˆ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‘๋ฒˆ์งธ๋กœ ํฐ ํƒ€์ผ์€ a ์ฒซ๋ฒˆ์งธ๋กœ ํฐ ํƒ€์ผ์„ b๋ผ๊ณ  ํ•  ๋•Œ, ๊ฐ€๋กœ ์„ธ๋กœ ์ค‘ ๋„“์€ ๋ณ€์˜ ๊ธธ์ด๋Š” ํ•ญ์ƒ a + b ์งง์€ ๋ณ€์˜ ๊ธธ์ด๋Š” ํ•ญ์ƒ b์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  2. ๋˜ํ•œ, b ๋‹ค์Œ์œผ๋กœ ์˜ฌ ํƒ€์ผ์˜ ๋ณ€์˜ ๊ธธ์ด ๋˜ํ•œ a + b์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ [a, b] = [b, a + b]๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ณ„์‚ฐํ•˜์—ฌ ๊ฐ€์žฅ ํฐ ๋‘ ํƒ€์ผ์˜ ๋ณ€์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

const getPerimeter = (x, y) => 2*x + 2*y

function solution(N) {
    if (N < 3) {
        return getPerimeter(1, N)
    }
    let a = 1, b = 1
    N -= 2
    while (N--) {
        [a, b] = [b, a + b]
    }
    return getPerimeter(b, a + b)
}

 

์‹œ๊ฐ„๋ณต์žก๋„: O(N)

๊ณต๊ฐ„๋ณต์žก๋„: O(1)

 

 

 

๊ฐ™์€ ๋กœ์ง์œผ๋กœ ์ข€ ๋” ๊ฐ„๋‹จํ•˜๊ฒŒ ์งœ๋ดค๋‹ค.

 

const getPerimeter = (x, y) => 2*x + 2*y

function solution(N) {
    let a = 0, b = 1
    while (--N) {
        [a, b] = [b, a + b]
    }
    return getPerimeter(b, a + b)
}

์‹œ๊ฐ„๋ณต์žก๋„: O(N)

๊ณต๊ฐ„๋ณต์žก๋„: O(1)