LeeWang_31
이왕31
LeeWang_31
전체 방문자
오늘
어제
  • 분류 전체보기 (234)
    • 프로젝트 (2)
      • 사이드 프로젝트 (2)
      • Codestates_pre_project (0)
    • 프론트엔드 (169)
      • Html (19)
      • CSS (18)
      • JavaScript (29)
      • Codestates (76)
      • 코딩노트 (27)
    • 백엔드 (10)
      • node (10)
    • 구르는 돌 🌑 (16)
      • Codestates (11)
      • 생각 (4)
      • 공부 흔적 (1)
    • 정보 (18)
      • 오류노트 (2)
      • 인텔리제이 정보 (9)
      • 깃 정보 (3)
      • 기타 정보 (4)
      • 안드로이드스튜디오 정보 (0)
    • CS (7)
      • 이론공부 (7)
    • App (6)
      • Android (3)
      • Kotlin (3)
    • 컴퓨터 수학 (5)
      • 암호론 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 사용자 친화 웹
  • 2693
  • 안드로이드스튜디오범블비
  • css
  • 1292
  • linuix 코드스테이츠
  • html
  • 사이드프로젝트
  • 생활코딩
  • 코딩애플
  • DP
  • 웹팩
  • 안드로이드스튜디오파이어베이스
  • 파이어베이스연동
  • 코플릿
  • 코드스테이츠
  • React
  • 자바스크립트
  • figjam
  • codestate
  • UI/UX
  • JavaScript
  • 백준
  • TODOlist
  • 2609
  • 번들링
  • linux
  • ubuntu
  • 사용자친화웹
  • 알고리즘

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
LeeWang_31

이왕31

[코플릿]tiling
프론트엔드/코딩노트

[코플릿]tiling

2022. 11. 3. 16:44

코드스테이츠 과제 코드를 공부 목적으로 변형 해서 정리 하였습니다.

✅문제

세로 길이 2, 가로 길이 n인 2 x n 보드가 있습니다. 2 x 1 크기의 타일을 가지고 이 보드를 채우는 모든 경우의 수를 리턴해야 합니다.

 

⛔주의

  • 타일을 가로, 세로 어느 방향으로 놓아도 상관없습니다. (입출력 예시 참고)

 

💬입출력 예시

let output = tiling(2);
console.log(output); // --> 2

output = tiling(4);
console.log(output); // --> 5
/* 
2 x 4 보드에 타일을 놓는 방법은 5가지
각 타일을 a, b, c, d로 구분

2 | a b c d
1 | a b c d 
------------

2 | a a c c
1 | b b d d 
------------

2 | a b c c
1 | a b d d 
------------

2 | a a c d
1 | b b c d 
------------

2 | a b b d
1 | a c c d 
------------
*/

🍀해결코드

function factorial(n) {
    let result = 1;
    for (let i = 2; i <= n; i++) result *= i;
    return result;
}

function count(n, k) {
    let result = factorial(n + k) / (factorial(k) * factorial(n))
    return result
}

let tiling = function (n) {
    // TODO: 여기에 코드를 작성합니다.
    let temp = 0;
    let result = 0
    if (n === 0) {
        return 0
    }
    for (let i = n; i >= 0; i -= 2) {
        console.log(i, temp)
        result += count(i, temp)
        temp += 1;
    }
    return result
};

🦦해설

가로타일을 하나 배치하면 그 아래는 무조건 하나의 가로타일을 배치해야 모든 공간을 채울수 있다.

 

2x2크기의 바닥이 있는 경우 세로타일 두개를 배치하는 경우와 가로타일을 두개 배치하는 경우가 있다.

2x3크기의 바닥인 경우 세로타일을 세개 배치하거나 세로타일 하나 가로타일 두개를 배치하는 경우가 있다.

세로타일을 1이라 하고, 가로타일 두개를 0이라고 하면 경우의수는 다음과 같다

111,10,01

2x4인경우는 1111,110,101,011,00이다.

쉽게 [1,1,1,1] 중 나올수있는 경우의 수 + [1,1,0]중 나올수있는 경우의 수 + [0,0] 중 나올수있는 경우의 수 이다.

 

중복된 숫자 사이에서 경우의수를 얻는 공식은 다음과 같다.

1110000처럼 1이 3개, 0이 4개인 상황에서 나올수있는 모든 경우의 수는 ( 4+3 )! / ( 4! * 3! )

 

팩토리얼을 factorial함수로 만들었다.

 

위에서 말한 중복된 숫자중 나올수 있는 경우의 수를 구하는 함수를 count에 구현했다.

 

for문을 돌면서 1이 되는 n을 2씩 감소, 0이 되는 temp을 1씩 증가시켜서 각각을 count에 보내서 나온 결과를 result에 더했다.

저작자표시 (새창열림)

'프론트엔드 > 코딩노트' 카테고리의 다른 글

[백준]9095/1, 2, 3 더하기/JavaScript  (0) 2022.11.14
[백준]2839/설탕배달/JavaScript  (0) 2022.11.08
[코플릿]isSubsetOf  (0) 2022.11.03
[코플릿]bubbleShot  (0) 2022.11.03
[코플릿]fibonacci  (0) 2022.11.03
    '프론트엔드/코딩노트' 카테고리의 다른 글
    • [백준]9095/1, 2, 3 더하기/JavaScript
    • [백준]2839/설탕배달/JavaScript
    • [코플릿]isSubsetOf
    • [코플릿]bubbleShot
    LeeWang_31
    LeeWang_31
    이왕 할 거면 기분 좋게

    티스토리툴바