2 x n 타일링 ( Level 5, JavaScript )

문제

1x1 정사각형 2개가 붙어 있는 타일이 있습니다. 이 타일을 이용하여 총 2xN 의 보드판을 채우려고 합니다. 타일은 가로, 세로 두 가지 방향으로 배치할 수 있습니다.

보드판의 길이 N이 주어질 때, 2xN을 타일로 채울 수 있는 경우의 수를 반환하는 tiling 함수를 완성하세요.

단, 리턴하는 숫자가 매우 커질 수도 있으므로 숫자가 5자리를 넘어간다면 맨 끝자리 5자리만 리턴하세요.예를 들어 N = 2일 경우 가로로 배치하는 경우와 세로로 배치하는 경우가 있을 수 있으므로 2를 반환해 주면 됩니다. 하지만 만약 답이 123456789라면 56789만 반환해주면 됩니다. 리턴하는 숫자의 앞자리가 0일 경우 0을 제외한 숫자를 리턴하세요. 리턴타입은 정수형이어야 합니다.

풀이

function tiling(n) {
    let arr = [1, 2];
  for ( let i = 2; i < n; i++ ) {
      arr[i] = arr[i-1] + arr[i-2];
    if ( arr[i].toString().length > 5 ) {
        arr[i] = Number(arr[i].toString().slice(-5));
    }
  }
  return Number(arr[n-1].toString().slice(-5));
}

피보나치 수열로 이해하면 되는데 이때 5자리 이상의 숫자들을 slice(-5)로 잘라주면서 배열에 넣어야 n이 커졌을 때도 연산이 가능하다

다른 사람의 풀이

똑같음

slice(-5) 대신 %10000 을 써놓은 분도 있었음


+ Recent posts