import java.util.Arrays;
import java.util.Scanner;
public class SimpleBinaryCode {
static int N,M;
static String[] code = { "0001101",
"0011001",
"0010011",
"0111101",
"0100011",
"0110001",
"0101111",
"0111011",
"0110111",
"0001011"};
public static void main(String args[]) throws Exception
{
Scanner sc = new Scanner(System.in);
int T;
T=sc.nextInt();
for(int test_case = 1; test_case <= T; test_case++)
{
N = sc.nextInt();
M = sc.nextInt();
String inputCode = "";
boolean flag = false;
for(int i = 0; i<N; i++){
String str = sc.next();
for(int j = M-1 ; j>=0; j--){
int c = str.charAt(j)-'0';
if(!flag && c == 1){
inputCode = str.substring(j-55,j+1);
flag = true;
}
}
}
int num = 0;
int[] inputnum = new int[8];
for(int i = 0; i<8; i++){
String str = inputCode.substring(num,num+7);
num += 7;
System.out.println(str);
for(int j = 0; j<10; j++){
if(str.equals(code[j])){
inputnum[i] = j;
}
}
}
System.out.println(Arrays.toString(inputnum));
int answer = 0;
int odd = 0;
for(int i = 0; i<8; i++){
if((i+1)%2==1){
odd += inputnum[i];
}
else{
answer += inputnum[i];
}
}
answer += odd*3;
int output = 0;
for (int i = 0; i < 8; i++) {
output +=inputnum[i];
}
if(answer%10==0) System.out.println("#" +test_case+" " +output);
else System.out.println("#" +test_case+" " +0);
}
}
}
풀이 방법
- 문제의 조건에 따라 이진코드별 매칭할 code를 사전에 선언한다.
- 한줄씩 입력받는데, 한행마다 끝에서부터 한글자씩 비교하여 1이 나오는 지점을 찾고, 그 지점부터 7개씩 끊어서 총 8개의 이진코드가 이어진 문자열을 inputCode에 저장한다.
- inputCode 안에서 7개씩 다시 끊어서 비교하는데 사전에 선언한 code와 매칭되는 이진코드를 찾고, 그 수를 inputnum에 넣어 준다.
- 홀수번째 수는 *3 해서 answer에 넣고, 짝수번째 수는 그대로 answer에 넣어준다.
- 10으로 나누어 떨어진다면, inputnum을 다 더한 output 값을 출력한다.