[URL]
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
www.swexpertacademy.com
[풀이 과정]
*시뮬레이션
1. 초기화 + 입력받기 : clear(), input()함수
2. 2차원 배열 arr[][]에서 56자리수 찾아내기
3. 56자리수 1차원 배열 code[]에 담기
4. 7자리씩 끊어 check[][]배열과 비교하여 같으면 dap[]배열에 그 수 저장. : isSame()함수
5, 최종적으로 dap[]배열 검사 : calDap()함수
[소스 코드]
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#include <stdio.h>
#include <string.h>
using namespace std;
int N, M;
int arr[55][105];
int code[56];
int dap[8];
int check[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 X;
int start;
int end;
int sum;
void clear() {
//arr[][] 초기화
for (int i = 0; i < 55; i++)
{
memset(arr[i], 0, sizeof(int) * 105);
}
//code[] 초기화
memset(code, -1, sizeof(int) * 56);
//code[] 초기화
memset(dap, 0, sizeof(int) * 8);
// 초기화
X = -1;
start = -1;
end = -1;
sum = 0;
}
void input(){
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
scanf("%1d", &arr[i][j]);
}
}
// 스캐너로 부터 56자리수 추출
for (int i = 0; i < N; i++)
{
for (int j = M - 1; j >= 0; j--)
{
if (arr[i][j] == 1)
{
X = i;
end = j;
start = end - 55;
break;
}
}
if (end != -1 && start != -1)
{
break;
}
}
}
bool isSame(int index, int val) {
int flag = 1;
for (int i = index; i < index + 7; i++)
{
if (code[i] != check[val][i % 7])
flag = 0;
}
return flag;
}
void calcDap()
{
int temp1 = dap[0] + dap[2] + dap[4] + dap[6];
int temp2 = dap[1] + dap[3] + dap[5];
if ((temp1 * 3 + temp2 + dap[7]) % 10 == 0)
sum = temp1 + temp2 + dap[7];
}
int main() {
int T;
scanf("%d", &T);
for (int tc = 0; tc < T; tc++)
{
// 초기화
clear();
// 입력
input();
// code[]에 추출한 56자리 수 넣기
for (int i = 0; i < 56; i++)
{
code[i] = arr[X][start + i];
}
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 10; j++)
{
//code[]랑 check[j][]배열 비교
if (isSame(i*7, j))
{
dap[i] = j;
break;
}
}
}
// 올바른 코드인가? 판별 ( 홀수자리 , 짝수 자리, 마지막 자리 검증 )
calcDap();
printf("#%d %d\n", tc + 1, sum);
}
return 0;
}
|
cs |
'Algorithm > SWEA' 카테고리의 다른 글
1249. [S/W 문제해결 응용] 4일차 - 보급로 (0) | 2019.07.11 |
---|---|
[SWEA] - 1208. [S/W 문제해결 기본] 1일차 - Flatten (0) | 2019.07.05 |
[SWEA] - 1244. [S/W 문제해결 응용] 2일차 - 최대 상금 (0) | 2019.06.22 |
[SWEA] - 1206. [S/W 문제해결 기본] 1일차 - View (0) | 2019.06.11 |
[SWEA] - 1767. 프로세서 연결하기 (0) | 2019.04.13 |