본문 바로가기
HackerRank

lego blocks

by Doromi 2023. 10. 5.
728x90
반응형

이 문제는 다이나믹 프로그래밍(Dynamic Programming)을 사용하여 풀 수 있는데, 공식적인 해결 방법을 제공하기보다는 알고리즘의 핵심 아이디어를 설명하겠습니다. 이 문제를 해결하려면 다음 단계를 수행해야 합니다:

각 레고 블록의 너비를 입력으로 받습니다.
각 줄마다 레고 블록을 쌓아보면서 가능한 모든 높이를 계산합니다.
가능한 모든 높이를 저장하는 배열을 만듭니다.
모든 줄에 대해 가능한 높이를 구한 후, 가능한 높이 배열을 기반으로 각 줄의 최대 높이를 계산합니다.
모든 줄의 최대 높이를 곱하여 결과를 출력합니다.
다음은 이 문제를 C#으로 구현한 코드입니다. 이 코드는 주요 아이디어를 나타내며, 실제로 동작하는 코드를 완성하려면 입력 처리 및 출력 등을 추가해야 할 것입니다.

using System;
using System.Linq;

class Program
{
    static long MOD = 1000000007;

    static long[] CalculateWays(int[] blocks, int length)
    {
        long[] ways = new long[length + 1];
        ways[0] = 1;

        for (int i = 1; i <= length; i++)
        {
            for (int j = 0; j < blocks.Length; j++)
            {
                if (i >= blocks[j])
                {
                    ways[i] = (ways[i] + ways[i - blocks[j]]) % MOD;
                }
            }
        }

        return ways;
    }

    static long GetMaxHeight(int[] blocks, int length)
    {
        long[] ways = CalculateWays(blocks, length);

        long maxHeight = 1;
        for (int i = 0; i < length; i++)
        {
            maxHeight = (maxHeight * ways[blocks.Length - 1]) % MOD;
        }

        return maxHeight;
    }

    static void Main(string[] args)
    {
        int[] blocks = { 1, 2 };
        int rows = 3;
        int cols = 2;

        long maxHeight = GetMaxHeight(blocks, cols);

        Console.WriteLine(maxHeight);
    }
}
728x90
반응형

'HackerRank' 카테고리의 다른 글

Tree: Level Order Traversal  (0) 2023.10.05
Rotate  (1) 2023.10.05
Tree : Top View  (0) 2023.10.05
Tree: Height of a Binary Tree  (0) 2023.10.04
Tree: Inorder Traversal  (0) 2023.10.04