암호코드 정보가 포함된 2차원 배열을 입력으로 받아 암호코드를 뽑아내, 올바른 암호코드인지 판별하는 문제.
T = int(input()) # 테스트 케이스의 개수 T
for n in range(1, T+1):
N, M = map(int, input().split()) # 배열의 세로 크기 N, 가로 크기 M
scanner = [] # 암호코드 저장하는 배열
dic = {'0001101':0, '0011001':1, '0010011':2,
'0111101':3, '0100011':4, '0110001':5,
'0101111':6, '0111011':7, '0110111':8,
'0001011':9}
max_num = 0
# 배열에 값 저장
for i in range(N):
scanner.append(input())
# 바코드 인식하기
for code in scanner:
if '1' in code:
scanner = code # 인식한 코드만 저장
break
# 암호코드 뽑아내기
for i in range(M-1, -1, -1):
if(scanner[i] == '1'):
code = scanner[i-55:i+1]
break
odd = 0 # 홀수 자리의 합
even = 0 # 짝수 자리의 합
if_odd = True
# 암호코드 해독하기
for i in range(0, 56, 7):
if(if_odd): odd += dic[code[i:i+7]] # 홀수합 저장
else: even += dic[code[i:i+7]] # 짝수합 저장
if_odd = not if_odd
# 암호코드 검증하기
auth = (odd*3)+even # 해독한 암호코드 값
if(auth%10==0): # 암호코드가 올바르면
print("#%d %d" %(n, odd+even))
else: # 올바르지 않으면
print("#%d %d" %(n, 0))
[문제풀이]
우선 이 문제는 암호코드가 포함된 2차원 배열에서 암호코드를 뽑아내야 한다.
암호코드는 모두 끝자리가 1로 되어있다.
# 암호코드 뽑아내기
for i in range(M-1, -1, -1):
if(scanner[i] == '1'):
code = scanner[i-55:i+1]
break
그래서 뒤에서부터 for문을 돌려, 1이 나오는 자리에서부터 56자리를 뽑으면 암호코드!
그럼 암호화 방식대로 해독하고 (홀수 자리의 합 x 3) + (짝수 자리의 합)이 10의 배수가 되는지 체크하면 된다.
'코딩테스트 > SWEA' 카테고리의 다른 글
| [Python, 파이썬] SWEA 2805. 농작물 수확하기 (3) | 2024.10.15 |
|---|---|
| [Python, 파이썬] SWEA 2806. N-Queen (1) | 2024.10.15 |
| [Python, 파이썬] SWEA 2001. 파리 퇴치 (0) | 2024.10.15 |
| [Python, 파이썬] SWEA 1209. [S/W 문제해결 기본] 2일차 - Sum (0) | 2024.10.15 |
| [Python, 파이썬] SWEA 1926. 간단한 369게임 (1) | 2024.10.15 |