N

(SWEA c++)1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 본문

SW Expert Academy

(SWEA c++)1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드

naeunchan 2020. 10. 14. 10:55
728x90
반응형

swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15FZuqAL4CFAYD&categoryId=AV15FZuqAL4CFAYD&categoryType=CODE

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

문제 해석에 시간이 많이 들었던 문제다...

0 ~ 9까지 해당하는 배열이 있기 때문에 전역 변수로 0과 1로 이뤄진 7자리의 숫자를 index에 맞게 number 변수로 선언하였다.

 

string 형태로 배열을 입력 받는다.(input 변수에 저장)

배열을 입력받을 때 '0'으로만 이뤄진 배열은 저장하지 않고 버리도록 한다.

만약 input 변수에서 '1'이 발견된다면 rfind 함수를 이용하여 해당 인덱스를 찾는다.

rfind를 사용하는 이유는 0 ~ 9까지 해당하는 숫자의 배열의 끝자리가 모두 1로 끝나기 때문에,

거꾸로 탐색을 하여 ('1'이 나오는 위치 - 55)부터 56개의 숫자를 받아오면 7자리씩 끊어서 암호를 알 수 있기 때문이다.

 

odd와 even을 이용하여 값을 더해주고, 암호코드가 맞는지 확인한 후 출력하면 된다.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

string number[10] = {"0001101", "0011001", "0010011", "0111101", "0100011", "0110001", "0101111", "0111011", "0110111", "0001011"};

int main (void)
{
    int t;
    cin >> t;
    
    for(int i = 1; i <= t; i++)
    {
        int n, m, ans = 0, odd = 0, even = 0;
        string input;
        vector<string> s;
        cin >> n >> m;
        
        for(int j = 0; j < n; j++)
        {
            cin >> input;
            if(input.find('1') == -1)
               continue;
            input = input.substr(input.rfind('1') - 55, 56);
            s.push_back(input);
        }
        
        for(int j = 0; j < 8; j++)
        {
            for(int k = 0; k < 10; k++)
            {
                if(number[k] == s[0].substr(7 * j, 7))
                {
                    if((j + 1) % 2 == 0)
                        even +=k;
                    else
                        odd += k;
                    ans += k;
                    break;
                }
            }
        }
        
        cout << "#" << i << " ";
        if(((odd * 3) + even) % 10 != 0)
            cout << 0 << endl;
        else
            cout << ans << endl;
                                           
    }
    return 0;
}
728x90
반응형