Machineboy空

B155:スタンプアート, 2차원 배열 본문

Computer/Coding Test

B155:スタンプアート, 2차원 배열

안녕도라 2025. 3. 31. 12:41

문제요약

스탬프를 이어 찍었을 때 나오는 그림을 출력하라.


난이도

B rank


풀이 포인트

 


REVIEW

 

시간들이면 풀수 있는 문제인건 확실한데, 뇌에 힘을 주기 귀찮은 대표적인 문제.

이런 문제는 대부분 어떻게 하면 되겠네. 하고 지피티를 자꾸 돌려버린다.

요즘 정말 나의 힘으로 온전히 해내는 일이 없다는 생각이 드는데,

완벽히 숙지할때까지 도중에 포기치 않고 해내는 근성이 필요함..

 

엄청난 알고리즘적 사고가 아닌 나머지와 몫을 적절히 다뤄 좌표끼리 매핑할 수 있느냐인 문제!


CODE

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var line = Console.ReadLine().Split();
        
        int H = int.Parse(line[0]);
        int W = int.Parse(line[1]);
        int N = int.Parse(line[2]);
        
        List<char[,]> stamps = new List<char[,]>();
        
        for(int i = 0; i < N; i++)
        {
            char[,] stamp = new char[H,W];
            
            for(int j = 0; j < H; j++)
            {
                var line2 = Console.ReadLine();
                for(int k = 0; k < W; k++ ){
                    stamp[j,k] = line2[k];
                }
            }
            stamps.Add(stamp);
        }
        
        var line3 = Console.ReadLine().Split();
        int h = int.Parse(line3[0]);
        int w = int.Parse(line3[1]);
        
        int[,] grid = new int[h,w];
        
        for(int i = 0; i < h; i++){
            var line4 = Console.ReadLine().Split();
            for(int j = 0; j < w; j++){
                grid[i,j] = int.Parse(line4[j]);
            }
        }
        
        char[,] final = new char[h*H, w*W];
        
        for(int i = 0; i < h*H; i++){
            for(int j = 0; j < w*W; j++){
                int gi = i / H;
                int gj = j / W;
                int stampIndex = grid[gi, gj] - 1;
                char[,] stamp = stamps[stampIndex];

                final[i, j] = stamp[i % H, j % W];
            }
        }
        
        for (int i = 0; i < h * H; i++)
        {
            for (int j = 0; j < w * W; j++)
            {
                Console.Write(final[i, j]);
            }
            Console.WriteLine();
        }
    }
}