🖥️ CS/Baekjoon Algorithms

백준 2290번 LCD Test (C++)

한국의 메타몽 2021. 4. 30. 02:27

문제 링크 : 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

문제 풀이는 다음과 같다.

 

1. 숫자 8을 LCD모니터에 출력해보자. 위의 그림과 같이, 숫자 8의 경우 0번째 ~ 6번째의 모든 자리들에 'ㅣ' 혹은 '-' 값이 출력된다.

2. 이를 기준으로 숫자 0~9까지의 모든 숫자들이 필요한 출력값들을 아래와 같이 저장해준다.

int temp[10][7] = {
    {1,1,1,0,1,1,1}, //0
    {0,0,1,0,0,1,0}, //1
    {1,0,1,1,1,0,1}, //2
    {1,0,1,1,0,1,1}, //3
    {0,1,1,1,0,1,0}, //4
    {1,1,0,1,0,1,1}, //5
    {1,1,0,1,1,1,1}, //6
    {1,0,1,0,0,1,0}, //7
    {1,1,1,1,1,1,1}, //8
    {1,1,1,1,0,1,1}, //9
};

숫자 1의 경우 0~6번째 중 해당 자리가 공백이 아닌 값이 들어가있음을 의미한다.

3. 저장한 위치값들을 기반으로 각 줄마다 'ㅣ', '-', 혹은 공백 ' '을 출력해준다.

이때 주의할 점이, 결국 출력은 한 줄을 기준으로 출력될 수 밖에 없다는 것이다.

이 점을 유의하면서 '\n'과 공백 ' '을 적절히 위치시켜야한다.

 

#include <iostream>
using namespace std;

int s = 0;
string n = "";
int temp[10][7] = {
    {1,1,1,0,1,1,1}, //0
    {0,0,1,0,0,1,0}, //1
    {1,0,1,1,1,0,1}, //2
    {1,0,1,1,0,1,1}, //3
    {0,1,1,1,0,1,0}, //4
    {1,1,0,1,0,1,1}, //5
    {1,1,0,1,1,1,1}, //6
    {1,0,1,0,0,1,0}, //7
    {1,1,1,1,1,1,1}, //8
    {1,1,1,1,0,1,1}, //9
};

void monitor(char c, int idx){ //찍히는 숫자, 0~6사이 위치
    int x = c-'0';
    if(idx%3==0){
        cout << " ";
        if(temp[x][idx]==1){for(int i=0; i<s; i++) cout << "-"; }
        else {for(int i=0; i<s; i++) cout << " "; }
        cout << "  ";
    }
    else{
        if(temp[x][idx]==1){cout << "|";}
        else cout << " ";
        if(idx%3==1) {for(int i=0; i<s; i++) cout << " ";}
        else cout << " ";
    }
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
    cin >> s >> n;
    for(int j=0; j<n.size(); j++){ // 0
        monitor(n[j],0); // 찍히는 숫자, 0~6사이 위치
    }
    cout << "\n";
    for(int a=0; a<s; a++){
        for(int j=0; j<n.size(); j++){ // 1~2
            for(int i=1; i<3; i++){
                monitor(n[j],i); // 찍히는 숫자, 0~6사이 위치
            }
        }
        cout << "\n";
    }
    for(int j=0; j<n.size(); j++){ // 3
        monitor(n[j],3); // 찍히는 숫자, 0~6사이 위치
    }
    cout << "\n";
    for(int a=0; a<s; a++){
        for(int j=0; j<n.size(); j++){ // 4~5
            for(int i=4; i<6; i++){
                monitor(n[j],i); // 찍히는 숫자, 0~6사이 위치
            }
        }
        cout << "\n";
    }
    for(int j=0; j<n.size(); j++){ // 6
        monitor(n[j],6); // 찍히는 숫자, 0~6사이 위치
    }
    cout << "\n";
    return 0;
}