구현 | SW Expert Academy 1240번 단순 2진 암호코드 | Python

Table of Contents



SW Expert Academy 1240번 단순 2진 암호코드 | Python

📌 SW Expert Academy 1240. [S/W 문제해결 응용] 1일차 - 단순 2진 암호코드 문제 바로가기

🔎 문제 설명

💙 D3

- 난이도 ★☆☆☆
- 구현

단순 구현이라 코드 작성이 어렵지 않았으나, 몇 가지 예외가 있어서 애를 먹었다. 댓글에서 힌트를 얻었다.

저같은분 있을 까봐 남겨둬요~ 앞에서부터 무조건 7개씩 끊으면 되는건줄 알았는데 꼭 그런 케이스만 있는건 아닙니다!

암호가 아닌 부분은 0으로 채워져 있다. 당연히 앞에서부터 무조건 7개씩 끊으면 될 줄 알았는데 이걸 고려하지 않으면 3/10 점을 받을 것이다..!



💻 내 코드

T = int(input())
for t in range(T):
    N, M = map(int, input().split())
    secrets = [input() for _ in range(N)]
    answer = 0

    def transform(secret: str):
        signal = ['0001101','0011001','0010011','0111101',
                  '0100011','0110001','0101111','0111011',
                  '0110111','0001011']
        numbers = []
        for i in range(len(secret)//7):
            sig = secret[7*i:7*(i+1)]
            if sig in signal:
                num = signal.index(sig)
                numbers.append(str(num))
        return ''.join(numbers)

    def correct(nums):
        nums = list(map(int, list(nums)))
        odd, even = 0, 0
        for idx, n in enumerate(nums):
            if idx%2==0:
                odd += n
            else:
                even += n
        if (3 * odd + even)%10 > 0:
            return 0
        return sum(nums)

    for secret in secrets:
        if set(secret) != set('0'):
            last = secret[::-1].index('1')
            number = transform(secret[-last-56:-last])
            answer = correct(number)

    print(f'#{t+1}', answer)




 


💙 You need to log in to GitHub to write comments. 💙
If you can't see comments, please refresh page(F5).