Problem Solving/BOJ

[백준 2290번] [구현] LCD Test

  • -
728x90
반응형

숫자를 크게 보면, S + 1을 기준으로 나머지가 0인 3개의 부분과, 나머지가 1이 아닌 2개의 부분으로 구획 가능하다.

 

이것을 기준으로 or 연산자를 활용해서 쉽게 계산할 수는 있다.

(다만, 귀찮아서 그냥 0~9까지 케이스를 각각 저장해두고 필요할때마다 꺼내 쓰는 방식을 채택하였다.)

매우 비효율적인 코드이지만 그냥 넘어가자.(귀찮다.)

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>

using namespace std;

int main(void){
    int S;
    string N;
    cin >> S >> N;
    char zero_store[23][12];
    char one_store[23][12];
    char two_store[23][12];
    char three_store[23][12];
    char four_store[23][12];
    char five_store[23][12];
    char six_store[23][12];
    char seven_store[23][12];
    char eight_store[23][12];
    char nine_store[23][12];

    for(int i = 0; i < 23; i++){
        for(int j = 0; j < 12; j++){
            zero_store[i][j] = ' ';
            one_store[i][j] = ' ';
            two_store[i][j] = ' ';
            three_store[i][j] = ' ';
            four_store[i][j] = ' ';
            five_store[i][j] = ' ';
            six_store[i][j] = ' ';
            seven_store[i][j] = ' ';
            eight_store[i][j] = ' ';
            nine_store[i][j] = ' ';
        }
    }

    // Setting zero
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) == 0){
            if(i / (S + 1) != 1){
                for(int j = 1; j <= S; j++){
                    zero_store[i][j] = '-';
                }
            }
        } 
        else{
            zero_store[i][0] = '|';
            zero_store[i][S + 1] = '|';
        } 
    }

    // Setting one
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) != 0){
            one_store[i][S + 1] = '|';
        } 
    }

    // Setting two
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) == 0){
            for(int j = 1; j <= S; j++){
                two_store[i][j] = '-';
            }
        } 
        else{
            if(i / (S + 1) == 0){
                two_store[i][S + 1] = '|';
            }
            else{
                two_store[i][0] = '|';
            }
        } 
    }

    // Setting three
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) == 0 ){
            for(int j = 1; j <= S; j++){
                three_store[i][j] = '-';
            }
        } 
        else{
            three_store[i][S + 1] = '|';
        } 
    }

    // Setting four
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) == 0 ){
            if(i / (S + 1) == 1){
                for(int j = 1; j <= S; j++){
                    four_store[i][j] = '-';
                }
            }
        } 
        else{
            if(i / (S + 1) == 0){
                four_store[i][0] = '|';
                four_store[i][S + 1] = '|';
            }
            else{
                four_store[i][S + 1] = '|';
            }
        } 
    }

    // Setting five
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) == 0 ){
            for(int j = 1; j <= S; j++){
                five_store[i][j] = '-';
            }
        } 
        else{
            if(i / (S + 1) == 0){
                five_store[i][0] = '|';
            }
            else{
                five_store[i][S + 1] = '|';
            }
        } 
    }

    // Setting six
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) == 0 ){
            for(int j = 1; j <= S; j++){
                six_store[i][j] = '-';
            }
        } 
        else{
            if(i / (S + 1) == 0){
                six_store[i][0] = '|';
            }
            else{
                six_store[i][0] = '|';
                six_store[i][S + 1] = '|';
            }
        } 
    }

    // Setting seven
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) == 0 ){
            if(i / (S + 1) == 0){
                for(int j = 1; j <= S; j++){
                    seven_store[i][j] = '-';
                }
            }
        } 
        else{
            seven_store[i][S + 1] = '|';
        } 
    }

    // Setting eight
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) == 0 ){
            for(int j = 1; j <= S; j++){
                eight_store[i][j] = '-';
            }
        } 
        else{
            eight_store[i][0] = '|';
            eight_store[i][S + 1] = '|';
        } 
    }

    // Setting nine
    for(int i = 0; i < 2 * S + 3; i++){
        if(i % (S + 1) == 0 ){
            for(int j = 1; j <= S; j++){
                nine_store[i][j] = '-';
            }
        } 
        else{
            if(i / (S + 1) == 0){
                nine_store[i][0] = '|';
                nine_store[i][S + 1] = '|';
            }
            else{
                nine_store[i][S + 1] = '|';
            }
        } 
    }

    vector<int> num_store;
    for(int i = 0; i < N.size(); i++){
        num_store.push_back(N[i] - '0');
    }

    for(int i = 0; i < 2 * S + 3; i++){
        for(int j = 0; j < num_store.size(); j++){
            if(num_store[j] == 0){
                for(int j = 0; j < S + 2; j++){
                    cout << zero_store[i][j];
                }
            }
            else if(num_store[j] == 1){
                for(int j = 0; j < S + 2; j++){
                    cout << one_store[i][j];
                }
            }
            else if(num_store[j] == 2){
                for(int j = 0; j < S + 2; j++){
                    cout << two_store[i][j];
                }
            }
            else if(num_store[j] == 3){
                for(int j = 0; j < S + 2; j++){
                    cout << three_store[i][j];
                }
            }
            else if(num_store[j] == 4){
                for(int j = 0; j < S + 2; j++){
                    cout << four_store[i][j];
                }
            }
            else if(num_store[j] == 5){
                for(int j = 0; j < S + 2; j++){
                    cout << five_store[i][j];
                }
            }
            else if(num_store[j] == 6){
                for(int j = 0; j < S + 2; j++){
                    cout << six_store[i][j];
                }
            }
            else if(num_store[j] == 7){
                for(int j = 0; j < S + 2; j++){
                    cout << seven_store[i][j];
                }
            }
            else if(num_store[j] == 8){
                for(int j = 0; j < S + 2; j++){
                    cout << eight_store[i][j];
                }
            }
            else if(num_store[j] == 9){
                for(int j = 0; j < S + 2; j++){
                    cout << nine_store[i][j];
                }
            }

            if(j == num_store.size() -1){
                cout << "\n";
            }
            else{
                cout << " ";
            }          
        }       
    }
    cout << "\n";

    return 0;
}
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.