출처 : 반크_백제역사 유적지구 및 이스탐블역사 유적지구
문제]
한 친구가 방금 새 컴퓨터를 샀다. 그 친구가 지금까지 샀던 가장 강력한 컴퓨터는 공학용 전자 계산기였다. 그런데 그 친구는 새 컴퓨터의 모니터보다 공학용 계산기에 있는 LCD 디스플레이가 더 좋다며 크게 실망하고 말았다. 그 친구를 만족시킬 수 있도록 숫자를 LCD 디스플레이 방식으로 출력하는 프로그램을 만들어보자.
입력
입력 파일은 여러 줄로 구성되며 표시될 각각의 숫자마다 한 줄씩 입력된다. 각 줄에는 s와 n이라는 두 개의 정수가 들어있으며 n은 출력될 숫자(0<=n<=99,999,999), s는 숫자를 표시하는 크기(1<=s<=10)를 의미한다. 0이 두 개 입력된 줄이 있으면 입력이 종료되며 그 줄은 처리되지 않는다.
출력
입력 파일에서 지정한 숫자를 수평 방향은 '-' 기호를, 수직 방향은 '|'를 이용해서 LCD 디스플레이 형태로 출력한다. 각 숫자는 정확하게 s+2개의 열, 2s+3개의 행으로 구성된다. 마지막 숫자를 포함한 모든 숫자를 이루는 공백을 스페이스로 채워야 한다. 두 개의 숫자 사이에는 정확하게 한 열의 공백이 있어야 한다. 각 숫자 다음에는 빈 줄을 한 줄 출력한다. 밑에 있는 출력 예에 각 숫자를 출력하는 방식이 나와있다.
입력 예
2 12345
3 67890
0 0
출력 예
-- -- --
| | | | | |
| | | | | |
-- -- -- --
| | | | |
| | | | |
-- -- --
--- --- --- --- ---
| | | | | | | |
| | | | | | | |
| | | | | | | |
--- --- ---
| | | | | | | |
| | | | | | | |
| | | | | | | |
--- --- --- ---
출처]
Programming Challenges 알고리즘 트레이닝 북(한빛미디어) : 문제4 LCD 디스플레이(LCD Display) p43
참고풀이]
#include <stdio.h>
#include <string.h>
int main()
{
int s, i, j, digit, num_digits;
char number[9];
char hor_bar[2][11]={" ", "----------"};
char ver_bar[2][2]={" ", "|"};
char hor[10][3]={{1, 0, 1}, {0, 0, 0}, {1, 1, 1}, {1, 1, 1}, {0, 1, 0},
{1, 1, 1}, {1, 1, 1}, {1, 0, 0}, {1, 1, 1}, {1, 1, 1}};
char ver[10][4]={{1, 1, 1, 1}, {0, 1, 0, 1}, {0, 1, 1, 0}, {0, 1, 0, 1},
{1, 1, 0, 1}, {1, 0, 0, 1}, {1, 0, 1, 1}, {0, 1, 0, 1},
{1, 1, 1, 1}, {1, 1, 0, 1}};
char result[5][104];
while(1)
{
scanf("%d%*c",&s);
if(s==0) break;
if(s>=1 && s<=10)
{
for(i=0; i<5; i++)
result[i][0]='\0';
//가로 bar의 길이를 s로 맞춰놓기 위하여 '\0'를 중간에 삽입한다.
hor_bar[0][s]='\0';
hor_bar[1][s]='\0';
scanf("%s%*c",number);
num_digits=strlen(number);
for(i=0; i<num_digits; i++)
{
digit=number[i]-'0';
//숫자 사이에는 일괄적으로 한 열 띄우기
if(i>0)
for(j=0; j<5; j++) strcat(result[j], " ");
//0번 - 맨 윗줄 가로 bar
strcat(result[0], " ");
strcat(result[0], hor_bar[hor[digit][0]]);
strcat(result[0], " ");
//1번 - 위쪽 세로 bar들
strcat(result[1], ver_bar[ver[digit][0]]);
strcat(result[1], hor_bar[0]);
strcat(result[1], ver_bar[ver[digit][1]]);
//2번 - 맨 윗줄 가로 bar
strcat(result[2], " ");
strcat(result[2], hor_bar[hor[digit][1]]);
strcat(result[2], " ");
//3번 - 위쪽 세로 bar들
strcat(result[3], ver_bar[ver[digit][2]]);
strcat(result[3], hor_bar[0]);
strcat(result[3], ver_bar[ver[digit][3]]);
//4번 - 맨 윗줄 가로 bar
strcat(result[4], " ");
strcat(result[4], hor_bar[hor[digit][2]]);
strcat(result[4], " ");
}
puts(result[0]);
for(i=0; i<s; i++) puts(result[1]);
puts(result[2]);
for(i=0; i<s; i++) puts(result[3]);
puts(result[4]);
putchar('\n');
//앞에서 삽입한 '\0'을 이제 되돌려 놓는다.
hor_bar[0][s]=' ';
hor_bar[1][s]='-';
}
}
return 0;
}
참고풀이 결과]
대한민국의 아름다운 영토, 독도의 겨울
'프로그램 > C언어 1000제' 카테고리의 다른 글
C언어 203제] 인터프리터(Interpreter) (1) | 2024.12.25 |
---|---|
C언어 202제] 그래픽 편집기(Graphical Editor) (0) | 2024.12.24 |
C언어 200제] 여행(The Trip) (0) | 2024.12.20 |
C언어 199제] 지뢰 찾기(Minesweeper) (0) | 2024.12.19 |
C언어 198제] 3n+1 문제(The 3n+1 Porblem) (0) | 2024.12.17 |
댓글