
1240 | [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드
코드를 살짝 더럽게 짠 것 같지만 ...
일단 2진 코드의 마지막 자리는 0~9 모두 1로 끝난다.
그래서 입력받은 숫자 행렬에서 각 행에 1이 있을 경우(암호코드 존재) 뒤에서부터 처음으로 1이 나오는 곳을 찾고 숫자 56개를 슬라이싱한다.
그래서 7자리씩 끊어가며 숫자로 변환하고, 그 값이 홀수자리 합 * 3 + 짝수자리 합을 했을 때 10의 배수라면 모든 숫자합을 출력하고, 10의 배수가 아니라면 0을 출력한다.
T = int(input())
nums = ['0001101', '0011001', '0010011', '0111101', '0100011', '0110001', '0101111', '0111011', '0110111', '0001011']
for tc in range(1, T+1):
N, M = map(int, input().split())
Mat = [list(map(int, input().rstrip())) for _ in range(N)]
answer = []
for i in range(N):
if 1 in Mat[i]:
for j in range(M-1, 0, -1):
if Mat[i][j] == 1:
tmp = Mat[i][j - 55 : j+1]
for k in range(8):
answer.append(nums.index(''.join(str(x) for x in tmp[7 * k: 7 * (k + 1)])))
break
break
sum1, sum2 = 0, 0
for i in range(1, 9):
if i % 2 == 1:
sum1 += answer[i-1]
else:
sum2 += answer[i-1]
result = sum(answer) if (sum1 * 3 + sum2) % 10 == 0 else 0
print(f'#{tc} {result}')
