[백준 25088] Punched Cards (C#, C++) - soo:bak
작성일 :
문제 링크
설명
R×C 크기의 펀치 카드 ASCII 아트를 규칙에 맞게 출력하는 문제입니다.
접근법
출력할 전체 크기는 (2R + 1) × (2C + 1)이고, 좌표에 따라 출력할 문자가 결정됩니다.
| 행과 열이 모두 짝수면 +, 행만 짝수면 -, 열만 짝수면 | , 둘 다 홀수면 .을 출력합니다. |
단, 왼쪽 위 2×2 영역은 첫 칸을 비우는 규칙에 따라 모두 .으로 출력합니다.
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
32
using System;
using System.Text;
class Program {
static void Main() {
var parts = Console.In.ReadToEnd().Split((char[])null, StringSplitOptions.RemoveEmptyEntries);
var idx = 0;
var t = int.Parse(parts[idx++]);
var sb = new StringBuilder();
for (var caseNum = 1; caseNum <= t; caseNum++) {
var r = int.Parse(parts[idx++]);
var c = int.Parse(parts[idx++]);
sb.AppendLine($"Case #{caseNum}:");
for (var i = 0; i <= 2 * r; i++) {
var line = new StringBuilder();
for (var j = 0; j <= 2 * c; j++) {
if (i < 2 && j < 2) line.Append('.');
else if (i % 2 == 0 && j % 2 == 0) line.Append('+');
else if (i % 2 == 0) line.Append('-');
else if (j % 2 == 0) line.Append('|');
else line.Append('.');
}
sb.AppendLine(line.ToString());
}
}
Console.Write(sb);
}
}
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
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t; cin >> t;
for (int caseNum = 1; caseNum <= t; caseNum++) {
int r, c; cin >> r >> c;
cout << "Case #" << caseNum << ":\n";
for (int i = 0; i <= 2 * r; i++) {
string line;
for (int j = 0; j <= 2 * c; j++) {
if (i < 2 && j < 2) line += '.';
else if (i % 2 == 0 && j % 2 == 0) line += '+';
else if (i % 2 == 0) line += '-';
else if (j % 2 == 0) line += '|';
else line += '.';
}
cout << line << "\n";
}
}
return 0;
}