작성일 :

문제 링크

31907번 - GIST 찍기

설명

고정된 3×4 그림을 K배 확대해 출력하는 문제입니다.


접근법

기본 그림은 문자열 배열로 고정되어 있습니다. 확대된 크기의 2차원 배열을 미리 만들어 둡니다.

원본의 각 문자를 K×K 블록으로 확대하여 해당 위치에 채운 뒤, 전체 배열을 출력합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System;
using System.IO;

class Program {
  static void Main() {
    using var reader = new StreamReader(Console.OpenStandardInput());
    using var writer = new StreamWriter(Console.OpenStandardOutput());

    var k = int.Parse(reader.ReadLine()!);
    var origin = new[] { "G...", ".I.T", "..S." };

    var n = 3;
    var m = 4;
    var enlarged = new char[n * k, m * k];
    for (var i = 0; i < n; i++) {
      for (var j = 0; j < m; j++) {
        var cur = origin[i][j];
        for (var ki = 0; ki < k; ki++) {
          for (var kj = 0; kj < k; kj++)
            enlarged[i * k + ki, j * k + kj] = cur;
        }
      }
    }

    for (var i = 0; i < n * k; i++) {
      for (var j = 0; j < m * k; j++)
        writer.Write(enlarged[i, j]);
      writer.WriteLine();
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <bits/stdc++.h>
using namespace std;

typedef vector<string> vs;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int k; cin >> k;

  vs origin = {
    "G...",
    ".I.T",
    "..S."
  };

  int n = 3, m = 4;
  vs enlarged(n * k, string(m * k, ' '));
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      char cur = origin[i][j];
      for (int ki = 0; ki < k; ki++) {
        for (int kj = 0; kj < k; kj++)
          enlarged[i * k + ki][j * k + kj] = cur;
      }
    }
  }

  for (const string& row : enlarged)
    cout << row << "\n";

  return 0;
}