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 |