여름의 서재
[SWEA] 1242_암호 코드 스캔 본문
728x90
📕 문제
💡 풀이법
: 정말정말 스트레스가 쌓이는 문제였다,,,
클린코드고 뭐고 빨리 끝내고 싶다는 생각에 함수 만들기는 커녕 한꺼번에 줄줄줄 다 적었다.
어려운 문제는 뭔가 그래도 끝내고 나면 뿌듯함이라도 있는데 이건 그냥 스트레스만 쌓이는 문제였다😫
dict = {'112':0, '122':1, '221':2, '114':3, '231':4, '132':5, '411':6, '213':7, '312':8, '211':9}
T = int(input())
for tc in range(1, T+1):
N, M = map(int, input().split())
code = [input() for _ in range(N)]
answer = 0
code_list = set()
for r in range(N):
for c in range(M - 1, -1, -1):
if code[r][c] != "0":
code_list.add(code[r][:c + 1])
break
continue
patterns = []
for code in code_list:
new_code = ''
for i in range(len(code)):
num = format(int(code[i], 16), 'b')
while len(num) != 4:
num = '0' + num
new_code += num
result = []
c1 = c2 = c3 = 0
for i in range(len(new_code)-1, -1, -1):
if c2 == 0 and c3 == 0 and new_code[i] == '1':
c1 += 1
elif c1 > 0 and c3 == 0 and new_code[i] == '0':
c2 += 1
elif c1 > 0 and c2 > 0 and new_code[i] == '1':
c3 += 1
elif c1 > 0 and c2 > 0 and c3 > 0 and new_code[i] == '0':
min_cnt = min(c1, c2, c3)
c1 //= min_cnt
c2 //= min_cnt
c3 //= min_cnt
pattern = dict[str(c1)+str(c2)+str(c3)]
result.append(pattern)
c1 = c2 = c3 = 0
if len(result) == 8:
if result not in patterns:
patterns.append(result)
total = 0
for j in range(8):
if j % 2:
total += result[j] * 3
else:
total += result[j]
if total % 10 == 0:
answer += sum(result)
result = []
print('#{} {}'.format(tc, answer))
'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA] 5188_최소합 (0) | 2021.10.05 |
---|---|
[SWEA] 2806_N-Queen (0) | 2021.10.05 |
[SWEA] 1240_단순 2진 암호코드 (0) | 2021.09.30 |
[SWEA]1232_사칙연산 (0) | 2021.09.24 |
[SWEA] 1949_등산로 조성 (DFS 이용) (0) | 2021.09.24 |
Comments