알고리즘

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

담쏙 2021. 9. 29. 22:31
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15FZuqAL4CFAYD 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

암호들을 보면 맨 뒤가 모두 1로 시작하는 것을 알 수 있다. 따라서 탐색을 할 때도 행의 맨 뒤부터 보며 1이 나타나는지를 확인한다. 1이 나오면 거기부터 56개가 암호이므로 my_code 변수에 저장하고 break 해준다.

my_code 에서 7개씩 잘라 my_dict 안에 있는 암호와 비교해서 변환 시켜주고 odd는 odd끼리, even은 even끼리 더해준다. 최종 계산 결과가 10의 배수일 경우는 암호를 다 더한 값을, 아닐 경우는 0을 출력한다.

 

해당 문제는 문자열을 뒤에서부터 찾는 아이디어만 있다면 쉽게 풀 수 있다.

 

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


for tc in range(int(input())):
    print('#{}'.format(tc+1), end=' ')
    n, m = map(int, input().split())
    arr = [input() for _ in range(n)]
    my_code = ''
    for i in range(n):
        if sum(map(int, list(arr[i]))) == 0:
            continue
        else:
            v_code = arr[i]
            for j in range(m-1, -1, -1):
                if v_code[j] == '1':
                    my_code = v_code[j-55:j+1]
                    break
            break
    my_code_list = [my_dict[my_code[i:i+7]] for i in range(0, 56, 7)]
    odd = 0
    even = 0
    for i in range(7):
        if i%2:
            even += my_code_list[i]
        else:
            odd += my_code_list[i]
    answer = odd * 3 + even + my_code_list[-1]
    if answer % 10 == 0 :
        print(sum(my_code_list))
    else:
        print(0)

'알고리즘' 카테고리의 다른 글

[백준] 21608. 상어 초등학교  (0) 2021.10.05
[SWEA] 1248. 공통 조상  (0) 2021.09.30
[백준] 1744. 수 묶기  (0) 2021.09.29
[백준] 12904. A와 B  (0) 2021.09.28
[백준] 1541. 잃어버린 괄호  (0) 2021.09.28