그리디하게 풀었다.
풀이 할때는 시간이 오래걸렸지만, 해결하고 보니 코드가 다른 사람들 코드랑 비슷했다.
# 단순 2진 암호코드
'''
암호코드 8개의 숫자
올바른 암호 : 홀수자리 합 *3 + 짝수자리합 = 10의 배수
스캐너를 만들자
스캐너는 직사각형 배열을 읽는다
암호 가로 길이 = 8*7
숫자 하나 = 7개의 비트로 암호화
'''
import sys;sys.stdin = open('txt/password.txt')
password = {
'0001101': 0,
'0011001': 1,
'0010011': 2,
'0111101': 3,
'0100011': 4,
'0110001': 5,
'0101111': 6,
'0111011': 7,
'0110111': 8,
'0001011': 9,
}
def scan_password(arr):
for i in range(n):
for j in range(m-1,-1,-1):
if arr[i][j] == 1:
# 어떻게 0을 찾았을 때 암호문의 시작일까? 뒤는 전부 1이니 뒤에서 부터 찾자
return i,j
t = int(input())
for tc in range(1,t+1):
n,m = map(int,input().split())
passowrd_arr = [list(map(int,input())) for _ in range(n)]
# for i in arr: print(i)
# 스캐너 돌리기 = 암호코드 1개 포함된 직사각형 배열 찾기
#7개의 비트가 한글자 => 8글자
#리스트 슬라이싱
r,c = scan_password(passowrd_arr) # 스캐너로 암호 시작점
passowrd_arr2 = ''.join(map(str,passowrd_arr[r][c-55:c+1]))
new_arr = []
a, b = 0,7
while b <= len(passowrd_arr2)+1:
# print(passowrd_arr2[a:b])
new_arr.append(password[passowrd_arr2[a:b]])
a = b
b = b+7
test_sum = 0
for i in range(len(new_arr)):
# 올바른 암호 : 홀수자리 합 *3 + 짝수자리합 = 10의 배수
# 자리가 1부터 시작됨 => 홀짝 반대로
if not i % 2:
test_sum += new_arr[i]*3
else:
test_sum += new_arr[i]
# print(test_sum)
if test_sum % 10 == 0:
print(f'#{tc} {sum(new_arr)}')
else:
print(f'#{tc}',0)
# print(r,c)
# if
# print(new_str)
# 검증코드 확인
#검증됐으면 숫자 더하기
강사님 코드
mapping = {
'0001101': 0, '0011001': 1, '0010011': 2,
'0111101': 3, '0100011': 4, '0110001': 5,
'0101111': 6, '0111011': 7, '0110111': 8,
'0001011': 9,
}
def find_pos(arr):
for i in range(n):
for j in range(m-1, -1, -1):
if arr[i][j] == 1:
return i,j-55
t= int(input())
for tc in range(1,t+1):
n, m = map(int,input().split())
arr = [list(map(int,input())) for _ in range(n)]
sx, sy = find_pos(arr)
pwd = [] # 암호코드
for _ in range(8):
pwd.append(mapping.get(''.join(map(str,arr[sx][sy:sy+7]))))
sy += 7
# 검증
odd = pwd[0] + pwd[2] + pwd[4] + pwd[6]
even = pwd[1] + pwd[3] + pwd[5] + pwd[7]
if (odd *3 + even) % 10 == 0:
print(f'#{tc} {sum(pwd)}')
else:
print(f'#{tc} 0')
'알고리즘 문제풀이' 카테고리의 다른 글
Swea D2_파리퇴치3 Python (0) | 2024.02.23 |
---|---|
Swea D2_ 11927. 이진탐색 Python Tree (0) | 2024.02.23 |
Swea D3_11750.이진수1 Python 2진법 (0) | 2024.02.22 |
Swea D3_11753. 이진수2 Python 2진법 (0) | 2024.02.22 |
백준 1620. 나는야 포켓몬 마스터 이다솜 Python 실버4 (1) | 2024.02.21 |