반응형
#2290 LCD Test는 단순하게 구현만 하면 되는 문제로, 특별한 알고리즘이 필요치 않습니다.
테이블을 만들어서 하면 좋을 듯 합니다.
문제의 링크입니다.
https://www.acmicpc.net/problem/2290
사실 이 문제는 LCD라고 되어 있지만, 7 segment LED라는 소자를 이용한 글쓰기와 같습니다. s 값에 따라 두께를 조절해야 하는 것이 좀 까다롭습니다.
제가 작성한 소스는 다음과 같습니다.
//------------------------------------------
// baekjoon #2290
// - by Aubrey Choi
// - created at 2019-09-03
//------------------------------------------
#include <stdio.h>
void drawLineChar(int h, int s, char ch)
{
const char *dline = "----------", *eline = " ";
if(h == 0)
{
printf(" %.*s ", s, (ch=='1'||ch=='4')?eline:dline);
return;
}
if(1 <= h && h <= s)
{
if(ch == '0' || ch == '4' || ch == '8' || ch == '9') printf("|%.*s|", s, eline);
else if (ch == '1' || ch == '2' || ch == '3' || ch == '7') printf(" %.*s|", s, eline);
else printf("|%.*s ", s, eline);
return;
}
if(h == s + 1)
{
printf(" %.*s ", s, (ch=='0'||ch=='1'||ch=='7')?eline:dline);
return;
}
if(s + 2 <= h && h <= 2 * s + 1)
{
if(ch == '0' || ch == '6' || ch == '8') printf("|%.*s|", s, eline);
else if(ch != '2') printf(" %.*s|", s, eline);
else printf("|%.*s ", s, eline);
return;
}
printf(" %.*s ", s, (ch=='1'||ch=='4'||ch=='7')?eline:dline);
}
void drawLine(int h, int s, char n[])
{
for(int i = 0; n[i]; i++) { drawLineChar(h, s, n[i]); putchar(' '); } putchar('\n');
}
int main()
{
int s;
char n[16];
scanf("%d%s", &s, n);
for(int h = 0; h < 2 * s + 3; h++) drawLine(h, s, n);
return 0;
}
실행결과는 다음과 같습니다.
728x90
'Programming > BOJ' 카테고리의 다른 글
[C/C++] 백준 #2294 동전 2(동적 계획법) (0) | 2023.04.20 |
---|---|
[C/C++] 백준 #2293 동전 1(동적 계획법) (0) | 2023.04.20 |
[C/C++] 백준 #2268 수들의 합 7(세그먼트 트리) (0) | 2023.04.19 |
[C/C++] 백준 #2261 가장 가까운 두 점(분할 정복) (0) | 2023.04.19 |
[C/C++] 백준 #2252 줄 세우기(위상 정렬) (0) | 2023.04.19 |
댓글