Algorithm/SW Expert Academy

[Python] 1240. 단순 2진 암호코드

느낌표 공장장 2021. 9. 29. 23:59
code = {
    '0001101': 0,
    '0011001': 1,
    '0010011': 2,
    '0111101': 3,
    '0100011': 4,
    '0110001': 5,
    '0101111': 6,
    '0111011': 7,
    '0110111': 8,
    '0001011': 9,
}

tc = int(input())
for idx in range(1, tc+1):
    n, m = map(int, input().split())

    # 배열 받아오기
    arr = []
    binary = ''
    for n in range(n):
        temp = input()
        arr.append(temp)
        if not binary and '1' in temp:   # 2진수가 있는 배열 저장
            binary = temp

    p = m - binary[::-1].index('1') # 배열에서 마지막 1 찾기 (암호는 다 1로 끝남)
    binary = binary[p-56:p] # 2진수 범위만 딱 저장. 불필요한거 버려
    number = []
    for i in range(0, 56, 7):
        number.append(code[binary[i:i+7]])  # 암호코드에 맞는 번호 저장

    odd = 0     # 홀수 자리 합 저장 
    even = 0    # 짝수 자리 합 저장 
    for i in range(8):
        # 검증코드 
        if i == 7:
            if (odd * 3 + even + number[i]) % 10 == 0:  # 정상적인 암호코드면 
                print('#{} {}'.format(idx, odd + even + number[i]))  # 암호코드들의 숫자 합 출력 
            else:   # 비정상 적이면 
                print('#{} {}'.format(idx, 0))  # 0 출력
        # 짝수자리 더하기 
        elif i % 2:
            even += number[i]
        # 홀수자리 더하기 
        else:
            odd += number[i]

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[Python] 5186. 이진수2  (0) 2021.09.30
[Python] 5185. 이진수  (0) 2021.09.30
[Python] 5178. 노드의 합  (0) 2021.09.24
[Python] 5177. 이진힙  (0) 2021.09.24
[Python] 5176. 이진탐색  (0) 2021.09.24