[프로그래머스] 쌍둥이 빌딩 숲(JavaScript)

Jake·2022년 12월 3일
0
post-custom-banner

문제 설명[링크]

은비는 길을 걷다가 관광 명소인 쌍둥이 빌딩 숲을 보게 되었습니다. 쌍둥이 빌딩 숲은 일렬로 빌딩들이 줄지어 서있는 곳입니다.
쌍둥이 빌딩 숲에는 높이가 1부터 n까지 각가 2 채씩 총 2n채의 빌딩이 존재하기 때문에 그러한 이름이 붙게 되었으며, 같은 높이를 가지는 빌딩 사이에는 그보다 높은 빌딩이 존재하지 않습니다.

은비는 쌍둥이 빌딩 숲을 한쪽 측면에서(열 방향으로) 바라보고 있습니다. 이때 count 채의 빌딩이 구분되어 보였습니다.

은비의 세계는 안타깝게도 원근감이 존재하지 않지만, 다행히 서로 다른 높이를 가지는 빌딩들은 각각 고유한 색깔을 가지고 있어 어떤 빌딩이 다른 빌딩에 의해 전체가 가려지지 않는다면 볼 수 있습니다.

예를 들어 은비가 바라본 방향에서 가까운 빌딩부터 차례로 높이가 1,1,3,2,2,3 순이라면 높이가 2인 빌딩은 가려져서 보이지 않고, 높이가 1인 빌딩과 높이가 3인 빌딩만 구분되어 보입니다.

n과 count가 주어졌을 때, 빌딩들이 배치될 수 있는 방법의 수를 return 하도록 solution 함수를 완성해주세요.

풀이

function solution(n, count) {
  const dividedConstant = 1000000007;
  const memo = new Array(count + 1).fill(0);
  memo[1] = 1;

  for (let i = 2; i <= n; i++) {
    const multiplyConstant = 2 * (i - 1);

    for (let j = count; j >= 1; j--) {
      memo[j] = (memo[j - 1] + memo[j] * multiplyConstant) % dividedConstant;
    }
  }
  
  return memo[count];
}

결과

post-custom-banner

2개의 댓글

comment-user-thumbnail
2022년 12월 5일

혹시 어떤 과정으로 다음과 같은 코드가 나오게 된것인지 간단하게 설명 해주실 수 있나요?

1개의 답글