Post
1240. 단순 2진 암호코드 (SWEA) | Gihun Son

1240. 단순 2진 암호코드 (SWEA)

※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

출처:

SW Expert Academy

나의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
T = int(input())

num_dict={'0001101':0, '0011001':1, '0010011':2,'0111101':3,'0100011':4,'0110001':5,'0101111':6,'0111011':7,'0110111':8,'0001011':9}

for test_case in range(1, T + 1):
    N,M=map(int,input().strip().split())
    done=False
    for _ in range(N):
        N_list=list(input())
        end_idx=0
        ans_list=[]
        if '1' in N_list and not done:
            for i in range(M-1,-1,-1):
                if N_list[i]=='1':
                    end_idx=i
                    break
            tmp_n=''
            for j in range(56):
                tmp_n+=N_list[end_idx-55+j]
                if j%7==6:
                    ans_list.append(num_dict[tmp_n])
                    tmp_n=''
            odd=sum(ans_list[::2])
            even=sum(ans_list[1::2])
            ans=sum(ans_list)
            if (odd*3+even)%10==0:
                print(f'#{test_case} {ans}')
            else:
                print(f'#{test_case} 0')
            done=True
  • 코드에 따른 숫자를 미리 dictionary에 저장해두었다.
  • 모든 암호의 마지막은 1로 끝나기 때문에, 입력으로 들어오는 문자열에서 마지막부터 찾기 시작하여, 1이 있는 index를 구한다. 그 후 그 index를 기준으로 56개의 암호를 찾고, 7개씩 슬라이싱하여 암호에 해당하는 정수를 ans_list에 넣는다.
  • 홀수번째 합과 짝수번째 합을 각각 구하고, 암호 조건에 맞는지 확인 후 출력한다.
This post is licensed under CC BY 4.0 by the author.