๋ฌธ์
- ์ต๋ฌด์กฐ๊ฐ์ ๋์ ๋ชจ์์ฒ๋ผ ์๊ธด ํ์ผ์ด ๋ถ์ด์๋ค. ํ์ผ์ด N๊ฐ์ผ๋ ๋๋ ์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ผ.
์ ํ์ฌํญ
- 1 <= N <= 80
์์
ํ์ผ [1, 1, 2, 3, 5]๊ฐ ๋ถ์ด ์๋ ๊ณณ์ ๋๋ ๋ ๋นจ๊ฐ ์ ์ผ๋ก ํํ๋์ด์๋ค.
๋นจ๊ฐ์ ์ผ๋ก ํํ๋ ๋๋ ์ ๊ธธ์ด๋ 26์ด๋ค.
๋ฌธ์ ํ์ด
- ๊ฐ์ฅ ํฐ ๋ ์ซ์๋ฅผ ์๋ฉด ๋๋ ๋ฅผ ๊ตฌํ ์ ์๋ค. ๋๋ฒ์งธ๋ก ํฐ ํ์ผ์ a ์ฒซ๋ฒ์งธ๋ก ํฐ ํ์ผ์ b๋ผ๊ณ ํ ๋, ๊ฐ๋ก ์ธ๋ก ์ค ๋์ ๋ณ์ ๊ธธ์ด๋ ํญ์ a + b ์งง์ ๋ณ์ ๊ธธ์ด๋ ํญ์ b์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ํ, 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)