오늘의 문제는 “2290번 LCD Test”.
숫자를 입력받으면 그 숫자를 ‘-‘, ‘ | ’ 두 기호를 사용해서 디지털 시계처럼 표현해야 하는 문제이다. |
코드가 길고, 이 문제 역시 간단한 이유로 틀렸기 때문에
왜 틀렸는지부터 말하고 소스코드를 본문 마지막에 올리겠다.
문제에 각 숫자의 사이에는 공백이 한 칸 있어야 한다는 조건이 있었다.
이 조건을 보고 문자의 끝에도 공백이 있는지 확인을 했고,
문자의 끝에 공백이 있다는 것을 알았다.
그리고 당연히 문자의 시작에도 공백이 있을 것이라고 생각했는데 그것이 문제였다.
1234가 있으면
1-2-3-4-로 출력을 해야하는데
-1-2-3-4-로 출력하는 바람에 틀렸다.
#include <iostream>
#include <string>
using namespace std;
int main()
{
int n;
string s;
cin >> n >> s;
for (int j = 0; j < 2 * n + 3; j++) // n * 2 + 3만큼의 세로줄이 필요하다.
{
for (int i = 0; i < s.size(); i++) // 우선은 입력받은 string만큼 출력한다
{
if (j == 0) //첫번째 가로줄
{
switch (s[i])
{
case '0':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '1':
for (int k = 0; k < n + 2; k++)
{
cout << " ";
}
break;
case '2':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '3':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '4':
for (int k = 0; k < n + 2; k++)
{
cout << " ";
}
break;
case '5':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '6':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '7':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '8':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '9':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
}
}
else if (j <= n) //첫번째 세로줄
{
switch (s[i])
{
case '0':
cout << "|";
for (int k = 0; k < n; k++)
{
cout << " ";
}
cout << "|";
break;
case '1':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
case '2':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
case '3':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
case '4':
cout << "|";
for (int k = 0; k < n; k++)
{
cout << " ";
}
cout << "|";
break;
case '5':
cout << "|";
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
break;
case '6':
cout << "|";
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
break;
case '7':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
case '8':
cout << "|";
for (int k = 0; k < n; k++)
{
cout << " ";
}
cout << "|";
break;
case '9':
cout << "|";
for (int k = 0; k < n; k++)
{
cout << " ";
}
cout << "|";
break;
}
}
else if (j == n + 1) //두번째 가로줄
{
switch (s[i])
{
case '0':
for (int k = 0; k < n + 2; k++)
{
cout << " ";
}
break;
case '1':
for (int k = 0; k < n + 2; k++)
{
cout << " ";
}
break;
case '2':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '3':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '4':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '5':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '6':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '7':
for (int k = 0; k < n + 2; k++)
{
cout << " ";
}
break;
case '8':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '9':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
}
}
else if (j <= 2 * n + 1) //두번째 세로줄
{
switch (s[i])
{
case '0':
cout << "|";
for (int k = 0; k < n; k++)
{
cout << " ";
}
cout << "|";
break;
case '1':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
case '2':
cout << "|";
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
break;
case '3':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
case '4':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
case '5':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
case '6':
cout << "|";
for (int k = 0; k < n; k++)
{
cout << " ";
}
cout << "|";
break;
case '7':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
case '8':
cout << "|";
for (int k = 0; k < n; k++)
{
cout << " ";
}
cout << "|";
break;
case '9':
for (int k = 0; k < n + 1; k++)
{
cout << " ";
}
cout << "|";
break;
}
}
else //마지막 가로줄
{
switch (s[i])
{
case '0':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '1':
for (int k = 0; k < n + 2; k++)
{
cout << " ";
}
break;
case '2':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '3':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '4':
for (int k = 0; k < n + 2; k++)
{
cout << " ";
}
break;
case '5':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '6':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '7':
for (int k = 0; k < n + 2; k++)
{
cout << " ";
}
break;
case '8':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
case '9':
cout << " ";
for (int k = 0; k < n; k++)
{
cout << "-";
}
cout << " ";
break;
}
}
cout << " "; //각 숫자 사이의 공백
}
cout << "\n"; //개행
}
return 0;
}