문제
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제 풀이
- 문제를 해결하기 위해 필요한 암호의 규칙은 일단 모든 암호값이 1로 끝나고, 암호 안에 1이 한 번도 없는 암호가 없다는 점이다.
- 따라서 암호를 해독하기 위해 필요없는 행과 열의 값들을 모두 삭제한다.
- 행은 1이 한번이라도 등장하는 곳을 빼고 모두 잘라내고, 열은 마지막 1을 가지는 인덱스 값을 구해 마지막 인덱스까지 열의 길이가 56이 될 수 있또록 자른다.
- 그 후 해독해야하는 암호들만 남아있는 문자열을 사용하여 문자를 7개씩 잘라가며 해독하여 해독한 값을 새로운 배열에 모두 저장한다.
- 그 후 암호 검증과정에 따라 인덱스가 홀수인 경우 3을 곱하여 더하고, 짝수인 경우 인덱스 값을 더한 후, 이 값이 10의 약수라면 해독된 암호값들을 모두 더하여 출력하고, 그렇지 않다면 0을 출력한다.
코드
pattern = {
"0001101": 0,
"0011001": 1,
"0010011": 2,
"0111101": 3,
"0100011": 4,
"0110001": 5,
"0101111": 6,
"0111011": 7,
"0110111": 8,
"0001011": 9
}
# 유효한 코드 추출
def extract_code():
# 필요 없는 행 모두 제거
index = -1
for i in range(n):
if '1' in array[i]:
index = i
break
code = array[index]
# 56길이의 암호추출
valid_code = ''
for i in range(len(code) - 1, -1, -1):
if code[i] == '1':
valid_code += code[i-55:i + 1]
break
return valid_code
t = int(input())
for tc in range(t):
n,m = map(int,input().split())
array = [input() for _ in range(n)]
# 유효한 코드로 암호 해독하기
code = extract_code()
result = []
for i in range(0,56,7):
decode = code[i:i+7]
result.append(pattern[decode])
# 유효한 숫자인지 검증
number = 0
for i in range(len(result)):
# 홀수자리 합 * 3
if i % 2 == 0:
number += result[i] * 3
else:
number += result[i]
if not number % 10:
print(f'#{tc + 1}',sum(result))
else:
print(f'#{tc + 1}',0)'Algorithm > Simulation' 카테고리의 다른 글
| [Python] SWEA 2805번 농작물 수확하기 (0) | 2023.05.11 |
|---|---|
| [Python] SWEA 1873번 상호의 배틀필드 (0) | 2023.05.10 |
| [Python] SWEA 1208번 Flatten (0) | 2023.05.09 |
| [Python] 백준 1543번 문서 검색 (0) | 2023.05.08 |
| [Python] SWEA 10570번 제곱 팰린드롬 수 (0) | 2023.05.08 |