코테 준비!

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

minsugar 2024. 5. 8. 18:48

문제링크 : https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15FZuqAL4CFAYD&categoryId=AV15FZuqAL4CFAYD&categoryType=CODE&problemTitle=%EC%95%94%ED%98%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1

 

 

 

데이터 :

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

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 i in range(tc):
    n,m = map(int, input().split())
    arr = [list(map(int,input())) for _ in range(n)]
    result = 0
    sum_x= 0
    data = []
    for x in range(len(arr)):
        for y in range(len(arr[x])-1,-1,-1):
            
            if arr[x][y] == 1:
                for k in range(56):
                    data.append(arr[x][y-k])
                    
                break
        else:
            continue
        break
        
    # print(data)
    ck = []
    while True:
        ck.append("".join([str(data.pop(-1)) for _ in range(7)]))
        if len(data) == 0:
            break
    sum_x = 0
    for j in range(0,len(ck),2):
        sum_x += code[ck[j]]
    sum_x = sum_x * 3
    for j in range(1,len(ck),2):
        sum_x += code[ck[j]]
    if sum_x % 10 == 0:
        for j in range(len(ck)):
            result += code[ck[j]]
    else:
        result = 0
    print(f'#{i+1}',result)

1. x, y 기준으로 y를 역순으로 1을 찾았습니다.

2. 1을 기준으로 56자리를 data에 추가하고

3. 역순으로 했기때문에 순서가 반대입니다. 다시 복구 시켜줍니다.

4. While에서 7개씩 끊어서 ck에 저장시켜줍니다. 

data에 더이상 데이터가 없으면 탈출하고, 계산된 값이 10의 배수인지 체크해주고 출력을 합니다.