[SWEA] 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드

야금야금 공부·2023년 5월 18일
0

SWEA

목록 보기
35/43
post-thumbnail

1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드


문제 풀이

import sys
sys.stdin = open("input.txt", "r")

code = {'0001101': 0, '0011001': 1, '0010011': 2, '0111101': 3, '0100011': 4,
        '0110001': 5, '0101111': 6, '0111011': 7, '0110111': 8, '0001011': 9}

# 테스트 케이스 개수
t = int(input())

for i in range(1, t + 1):
	
    # n: 세로 길이, m: 가로 길이
    n, m = map(int, input().split())
    arr = [list(input()) for _ in range(n)]
    x, y = 0, 0

    num = ""  # 추출한 암호문
    for a in range(n):
        for b in range(m):
            if arr[a][b] == '1':  # 1이 시작하는 곳의 위치 x, y
                x, y = a, b
                break
	
    # 암호문의 1의 개수
    one_cnt = arr[x].count('1')
    for b in range(y, m):
        num += arr[x][b]
        # 만약 1의 개수와 num의 1의 개수가 같다면 암호문을 모두 가져온 것
        if num.count('1') == one_cnt:  #
            break
	
    # 만약 암호문 길이가 56이 아니면 0을 앞에 붙여준다
    while len(num) != 56:  
        num = "0" + num
	
    # 암호 해독
    idx = result = total = 0
    for a in range(0, 56, 7):
        binary_num = ""
        idx += 1
        for b in range(a, a + 7):  # 7의 길이만큼 암호를 자름
            binary_num += num[b]

        if idx % 2:  # 인덱스가 홀수일 경우
            result += (code[binary_num] * 3)
        else:        # 짝수일 경우
            result += code[binary_num]
        # 암호코드가 올바를 경우, 암호코드에 포함된 숫자의 합
        total += code[binary_num]  

    if result % 10 == 0: # 10의 배수일 경우
        print(f"#{i} {total}")
    else:
        print(f"#{i} {0}")

0개의 댓글