여름의 서재

[SWEA] 1242_암호 코드 스캔 본문

알고리즘/SWEA

[SWEA] 1242_암호 코드 스캔

엉아_ 2021. 9. 30. 20:11
728x90

📕 문제

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

💡 풀이법

: 정말정말 스트레스가 쌓이는 문제였다,,,

클린코드고 뭐고 빨리 끝내고 싶다는 생각에 함수 만들기는 커녕 한꺼번에 줄줄줄 다 적었다.

어려운 문제는 뭔가 그래도 끝내고 나면 뿌듯함이라도 있는데 이건 그냥 스트레스만 쌓이는 문제였다😫

 

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