For Programmer

SWEA 1240번 파이썬 문제풀이(단순 2진 암호코드) 본문

코팅테스트/백준 문제 모음

SWEA 1240번 파이썬 문제풀이(단순 2진 암호코드)

유지광이 2022. 3. 23. 20:36
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV15FZuqAL4CFAYD 

 

SW Expert Academy

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

swexpertacademy.com

 


 

문제 설명이 참으로 이해하기 어렵다.. 또한 히든 케이스 예를들어) 암호코드가 처음7개가 일치하는 데도 불구하고 그 다음7개가 일치하지 않는 경우 다시 처음으로 돌아가 인덱스를 한개 증가시켜서 그다음 7개 부터 검사해야하는 방식으로 코드를 짜야하는 경우가 케이스에 있다. 이러한 예외케이스를 설명을 안해주니 찾기가 참으로 힘들었다.. 나머지는 쉽게 구현할 수 있었고 주석으로 달아놨다.

 

import sys

sys.stdin = open('input.txt', 'r')


def pw_code(binary):
    if binary == '0001101':
        return '0'
    elif binary == '0011001':
        return '1'
    elif binary == '0010011':
        return '2'
    elif binary == '0111101':
        return '3'
    elif binary == '0100011':
        return '4'
    elif binary == '0110001':
        return '5'
    elif binary == '0101111':
        return '6'
    elif binary == '0111011':
        return '7'
    elif binary == '0110111':
        return '8'
    elif binary == '0001011':
        return '9'
    else:
        return ''


T = int(input())
for tc in range(1, T + 1):
    r, c = map(int, input().split())
    check = False  # 만약 암호줄이 발견되면 그 다음줄부턴 검사x
    result = 0
    for i in range(r):
        temp = input()
        index = 0  # 0~c-56 까지 검사
        if temp.count('1') == 0:  # 만약 암호줄이 0으로만 이루어져 있다면 다음 줄 검색
            continue
        while not check and index <= c - 56:  # 아직 암호줄이 반견되지 않았고 index가 c -56이 되기 전까지 반복
            s = index  # 검사 시작인덱스를 설정
            cnt, pw, code = 0, 0, 0  # 암호코드를 찾은 개수, 비밀번호, 암호코드

            while s <= c - 7:  # c - 7 번째 인덱스까지 검색
                length_7 = temp[s:s + 7]  # 7구간을 자른다.
                num = pw_code(length_7)  # 해당 구간과 일치하는 암호코드가 있는 지 확인

                if num:  # 있다면
                    if cnt % 2 == 0:  # 해당 코드가 짝수 번째라면
                        code += (int(num) * 3)
                    else:  # 홀수 번째라면
                        code += int(num)
                    s += 7  # 그 후 인덱스를 7개 늘려준다.
                    cnt += 1  # 찾은 암호코드 개수를 1개 증가
                    pw += int(num)  # 비밀번호를 더해준다.
                else:  # 만약 없다면 바로 반복문 종료 후 다음 인덱스 부터 체킹해본다
                    break

            if cnt == 8:  # 만약 찾은 암호코드 개수가 8개라면
                if code % 10 == 0:  # 그 암호코드가 10의 배수라면
                    result = pw  # 더한 비밀번호를 답으로 설정
                    check = True  # 암호줄이 발견되었다면 의미이므로 더이상 검색x

            index += 1  # 인덱스 1 증가

    print(f'#{tc} {result}')

 

 

 

728x90
Comments