프로그래머스 LEVEL 2(3 x n 타일링)
-
사용 언어 : javascript
-
해결 날짜 : 2022-12-28
-
해결 방법 :
- n이 홀수일 경우는 타일링 불가능
- n이 짝수일 경우 점화식에 따라 계산 가능
- f(n) = f(n - 2) x 4 - f(n - 4)
- n === 2일 경우, 3
- n === 4일 경우, 11
- n === 6일 경우, 41
- n === 8일 경우, 153
- f(n) = f(n - 2) x 4 - f(n - 4)
- 따라서 n이 2와 4일 경우 early return
- n이 6 이상일 경우 2씩 증가시키며 값 계산
- 이 때 경우의 수가 커질 경우를 대비해 1000000007로 나눈 나머지를 반환하되,
- 점화식 f(n) = f(n - 2) x 4 - f(n - 4)을 계산할 때 f(n - 2) x 4가 f(n - 4)보다 더 작은 경우 음수가 나오므로 1000000007을 더한 후 1000000007로 나눈 나머지 반환
-
회고 :
- 처음에 n이 2, 4, 6, 8, … 의 개수를 구할 때 각 n에서 새로 추가되는 타일을 생각하지 못했다.
- 예를 들어 n === 6일 경우, 이전과 대비해
- |==|
- -–
- 과 같은 경우가 2개씩 추가된다.
-
코드
function solution(n) { if (n === 2) return 3; if (n === 4) return 11; let count1 = 3; let count2 = 11; let temp = 0; for (let i = 6; i <= n; i += 2) { temp = count1 % 1000000007; count1 = count2 % 1000000007; count2 = (count1 * 4 - temp + 1000000007) % 1000000007; } return count2; }
-
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges