티스토리 뷰

 

SW Expert Academy

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

swexpertacademy.com


1. 문제 내용

 

 

2. 접근 방식

  • 입력된 문자열의 각 문자를 [표-1]을 보고 다시 값(숫자)로 변환
  • 값을 6자리의 2진수로 변환 ex) 110 → 000110
  • 2진수를 모두 연결 후, 8비트씩 끊어 10진수로 변환
  • 10진수(아스키 코드)를 문자열로 변환

각 단계는 문제를 보고 유추할 수 있었지만, 10진수(아스키 코드)를 문자열로 변환하는 것은 생각하기 어려웠다. 하지만, 어떤 문자를 2진수로 표현하려면, 먼저 문자를 아스키 코드로 변환한 후 2진수로 표현해야 하므로 마지막 단계를 필요하다.

 

3. 정답 코드

  • ascii_lowercase, ascii_uppercase : 알파벳 소문자/대문자를 담은 리스트
  • bin( ) : 10진수 → 2진수
  • int(2진수, 2) : 2진수 → 10진수
  • chr( ) : ASCII 코드 → 문자열
from string import ascii_lowercase, ascii_uppercase 

def make_table() :
    table = dict()
    num = 0
    
    for alpha in ascii_uppercase +  ascii_lowercase:
        table[alpha] = num
        num += 1

    for n in range(10) :
        table[str(n)] = num
        num += 1
        
    table['+'], table['/'] = num, num + 1
    
    return table

T = int(input())

for test_case in range(1, T + 1):
    base64_Encoding = input()
    table= make_table()

    binary = ''
    for c in base64_Encoding :
        b = bin(table[c])[2:] # ob110 -> 110
        bits6 = '0' * (6 - len(b)) + b # 110 -> 000110
        
        binary += bits6
    
    index = 0
    sentence = ''
    while index <len(binary) :
        bits8 = binary[ index : index + 8 ]
        decimal = int(bits8, 2) # ASCII -> string
        
        sentence += chr(decimal)
        index += 8
    print(f'#{test_case} {sentence}')
728x90