본문 바로가기
Programming/BOJ

[C/C++] 백준 #2290 LCD Test(구현)

by 작은별하나 2023. 4. 20.
반응형

#2290 LCD Test는 단순하게 구현만 하면 되는 문제로, 특별한 알고리즘이 필요치 않습니다.

 

테이블을 만들어서 하면 좋을 듯 합니다.

 

문제의 링크입니다.

 

https://www.acmicpc.net/problem/2290

 

2290번: LCD Test

첫째 줄에 두 개의 정수 s와 n이 들어온다. (1 ≤ s ≤ 10, 0 ≤ n ≤ 9,999,999,999)이다. n은 LCD 모니터에 나타내야 할 수 이며, s는 크기이다.

www.acmicpc.net

 

7 segment LED

 

사실 이 문제는 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

댓글