https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15FZuqAL4CFAYD
<풀이>
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";
}
}
|
구현에 대해 알아볼 수 있는 문제였습니다.
'알고리즘 문제풀이 > SWEA' 카테고리의 다른 글
[C++] SWEA 2382 - 미생물 격리 (0) | 2020.05.03 |
---|---|
[C++] SWEA 2819 - 격자판의 숫자 이어 붙이기 (0) | 2020.05.03 |
[C++] SWEA 1961 - 숫자 배열 회전 (0) | 2020.05.03 |
[C++] SWEA 1206 - View (0) | 2020.05.03 |
[C++] SWEA 1204 - 최빈수 구하기 (0) | 2020.05.03 |