1240. 단순 2진 암호코드 (SWEA)
※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.
출처:
나의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
T = int(input())
num_dict={'0001101':0, '0011001':1, '0010011':2,'0111101':3,'0100011':4,'0110001':5,'0101111':6,'0111011':7,'0110111':8,'0001011':9}
for test_case in range(1, T + 1):
N,M=map(int,input().strip().split())
done=False
for _ in range(N):
N_list=list(input())
end_idx=0
ans_list=[]
if '1' in N_list and not done:
for i in range(M-1,-1,-1):
if N_list[i]=='1':
end_idx=i
break
tmp_n=''
for j in range(56):
tmp_n+=N_list[end_idx-55+j]
if j%7==6:
ans_list.append(num_dict[tmp_n])
tmp_n=''
odd=sum(ans_list[::2])
even=sum(ans_list[1::2])
ans=sum(ans_list)
if (odd*3+even)%10==0:
print(f'#{test_case} {ans}')
else:
print(f'#{test_case} 0')
done=True
- 코드에 따른 숫자를 미리 dictionary에 저장해두었다.
- 모든 암호의 마지막은 1로 끝나기 때문에, 입력으로 들어오는 문자열에서 마지막부터 찾기 시작하여, 1이 있는 index를 구한다. 그 후 그 index를 기준으로 56개의 암호를 찾고, 7개씩 슬라이싱하여 암호에 해당하는 정수를 ans_list에 넣는다.
- 홀수번째 합과 짝수번째 합을 각각 구하고, 암호 조건에 맞는지 확인 후 출력한다.
This post is licensed under CC BY 4.0 by the author.