문제

링크

풀이

#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
vector<vector<char>> v;
 
inline void a(int s, int x) {
  for (int i=0; i<s; i++) v[0][x+i+1] = '-';
}
 
inline void b(int s, int x) {
  for (int i=0; i<s; i++) v[i+1][x] = '|';
}
 
inline void c(int s, int x) {
  for (int i=0; i<s; i++) v[i+1][x+s+1] = '|';
}
 
inline void d(int s, int x) {
  for (int i=0; i<s; i++) v[s+1][x+i+1] = '-';
}
 
inline void e(int s, int x) {
  for (int i=0; i<s; i++) v[2*s+1-i][x] = '|';
}
 
inline void f(int s, int x) {
  for (int i=0; i<s; i++) v[2*s+1-i][x+s+1] = '|';
}
 
inline void g(int s, int x) {
  for (int i=0; i<s; i++) v[2*s+2][x+i+1] = '-';
}
 
void solve(void) {
  int s; string n; cin >> s >> n;
  v.assign(2*s+3, vector<char>((s+3)*n.length(), ' '));
  for (int i=0; i<n.length(); i++) {
    int x = (s+3)*i;
    switch (n[i]) {
      case '0': a(s, x); b(s, x); c(s, x); e(s, x); f(s, x); g(s, x); break;
      case '1': c(s, x); f(s, x); break;
      case '2': a(s, x); c(s, x); d(s, x); e(s, x); g(s, x); break;
      case '3': a(s, x); c(s, x); d(s, x); f(s, x); g(s, x); break;
      case '4': b(s, x); c(s, x); d(s, x); f(s, x); break;
      case '5': a(s, x); b(s, x); d(s, x); f(s, x); g(s, x); break;
      case '6': a(s, x); b(s, x); d(s, x); e(s, x); f(s, x); g(s, x); break;
      case '7': a(s, x); c(s, x); f(s, x); break;
      case '8': a(s, x); b(s, x); c(s, x); d(s, x); e(s, x); f(s, x); g(s, x); break;
      case '9': a(s, x); b(s, x); c(s, x); d(s, x); f(s, x); g(s, x); break;
    }
  }
 
  for (int i=0; i<2*s+3; i++) {
    for (int j=0; j<(s+3)*n.length(); j++) {
      cout << v[i][j];
    }
    cout << "\n";
  }
}
 
int main(void) {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
 
  solve();
  return 0;
}