https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15FZuqAL4CFAYD

 

SW Expert Academy

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

swexpertacademy.com

<풀이>

1. 암호코드가 포함된 2차원 배열을 입력받는다.

2. 입력받은 배열 중에서 암호코드를 찾는다.

3. 찾은 암호코드를 숫자 암호코드로 변환한다.

4. 숫자암호코드가 정상적인 암호코드인지 판별하고 출력한다.

<해법>

1. 2차원 배열에서 암호코드를 찾는 방법.

=> 2진수로된 암호코드 숫자들은 모두 '1'로 끝납니다. 따라서 주어진 2차원 배열을 뒤에서부터 검사하여 1을 찾은 후, 그 좌표부터 앞 56숫자는 모두 암호코드가 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
using namespace std;
 
int code[10][7= {
    {0,0,0,1,1,0,1}, //0
    {0,0,1,1,0,0,1}, //1
    {0,0,1,0,0,1,1}, //2
    {0,1,1,1,1,0,1}, //3
    {0,1,0,0,0,1,1}, //4
    {0,1,1,0,0,0,1}, //5
    {0,1,0,1,1,1,1}, //6
    {0,1,1,1,0,1,1}, //7
    {0,1,1,0,1,1,1}, //8
    {0,0,0,1,0,1,1}  //9
};
 
int N, M;
int arr[50][100];
int codeBit[56];
int codeNum[8];
int res;
 
int main() {
 
    int test_case;
    int T;
 
    cin >> T;
 
    for (test_case = 1; test_case <= T; test_case++) {
 
        //사용할 변수 초기화
        res = 0;
 
        //입력
        cin >> N >> M;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                scanf_s("%1d"&arr[i][j]);
            }
        }
 
        //비트코드 찾기
        bool codeFind = false;
        for (int i = 0; i < N; i++) {
            for (int j = M - 1; j >= 0; j--) {
                if (arr[i][j] == 1) {
                    codeFind = true;
                    for (int k = 0; k < 56; k++) {
                        codeBit[k] = arr[i][j - 55 + k];
                    }
                    break;
                }
            }
            if (codeFind) {
                break;
            }
        }
 
        //비트코드 숫자코드로 변환
        for (int i = 0; i < 8; i++) {
            for (int k = 0; k < 10; k++) {
                bool isSame = true;
                for (int j = 0; j < 7; j++) {
                    if (codeBit[(i * 7+ j] != code[k][j]) {
                        isSame = false;
                        break;
                    }
                }
                if (isSame) {
                    codeNum[i] = k;
                    break;
                }
            }
        }
 
        //숫자코드 계산
        int sum = (codeNum[0+ codeNum[2+ codeNum[4+ codeNum[6]) * 3 + codeNum[1+ codeNum[3+ codeNum[5+ codeNum[7];
 
        //정상적인 암호코드일 경우, 모든 숫자 더하기
        if (sum % 10 == 0) {
            for (int i = 0; i < 8; i++) {
                res += codeNum[i];
            }
        }
 
        //출력
        cout << "#" << test_case << " " << res << "\n";
    }
}
 

 

구현에 대해 알아볼 수 있는 문제였습니다.

+ Recent posts