[Python] SWEA 1240 : 단순 2진 암호코드
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
ANS
def getcode(s):
tmp = ''
for i in s:
tmp += i
password = {'0001101': 0, '0011001': 1, '0010011': 2, '0111101': 3, '0100011': 4,
'0110001': 5, '0101111': 6, '0111011': 7, '0110111': 8, '0001011': 9}
return password[tmp]
T = int(input())
for tc in range(1,T+1):
N,M = map(int, input().split()) # 세로 N, 가로 M
arr = [list(input()) for _ in range(N)]
st = 0
for row in range(N):
if '1' in arr[row]:
tmp = arr[row] # 한 줄에 대해서만 조사해도 암호를 판별할 수 있다. #0만 들어있는 줄은 고려하지 않을 것이다.
st = M-1-arr[row][::-1].index('1')-55 # 이 문제의 포인트. 뒤에서부터 1을 찾는 방법
break
codes =[]
for _ in range(8):
codes.append(getcode(arr[row][st:st+7]))
st += 7
ans = 0
for idx in range(8):
if idx%2 == 0:
ans += codes[idx]*3
else:
ans+= codes[idx]
if ans % 10 == 0:
print(f'#{tc} {sum(codes)}')
else:
print(f'#{tc} 0')
🔑
더보기
이 문제의 포인트는 2차원 배열의 뒤에서부터 접근하는 방법을 아느냐는 것이다. 2차원 배열의 뒤에서부터 접근하는 방법을 잘 몰랐기 때문에 1차 시도 코드가 매우 길어졌고, keyerror에 잘 대응하지 못했다.
또한, 모든 비밀번호가 1로 끝나는 것을 발견하지 못한 상태로 문제 풀이에 임해 간단한 문제를 굉장히 복잡하게 풀었다.
우선 1이 있어야만 암호가 존재할 수 있기 때문에 1이 없는 줄은 과감히 넘기고, 1이 있는 줄의 경우 마지막 1이 몇 번째에 위치했는지를 구하고자 했다. 그 후, 암호의 길이가 56이기 때문에 55개만큼 빼줬다. st는 우리가 찾고자 하는 암호문이다.
그 후 암호문을 돌면서 getcode 안의 password 딕셔너리를 이용해 암호를 구했다.
문제를 꼼꼼하게 읽을 것.
늘 생각하는 거지만 성격이 급해 문제에서 충분히 얻을 수 있는 힌트를 얻지 못해 어렵게 돌아가는 경우가 많았다.
'알고리즘 > SWEA' 카테고리의 다른 글
| [Python] SWEA 5209: 최소 생산 비용 (0) | 2023.03.29 |
|---|---|
| [Python] SWEA 1226: 미로1 (0) | 2023.02.21 |
| [Python] SWEA 4871: 그래프 경로 (0) | 2023.02.14 |
| [Python] SWEA 6485: 삼성시의 버스 노선 (0) | 2023.02.09 |
| [Python] SWEA 1859: 백만 장자 프로젝트 (0) | 2023.02.06 |
TAGS.
