ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SWEA D2-1928] Base64 Decoder - Python
    알고리즘/SWEA 2022. 11. 13. 21:55
    728x90

     

    #인코딩 하기
    '''
    24bit 버퍼에 MSB 부터 한바이트씩 3바이트 문자 넣음
    버퍼의 위쪽부터 6비트씩 잘라 그 값 읽은 후 표1 문자로 인코딩
    
    디코딩 해서 원문 출력하기
    
    문자열 길이 항상 4의 배수
    문자열 길이 100000 안넘음 (10만)
    '''
    
    #6비트 잘린 값 4개 모아서 24비트
    # - > 8byte로 다시 잘라서 디코딩
    
    T = int(input())
    
    for tc in range(1,T+1):
        B64_str = str(input())
        Binary_B64 = "" #입력값 2진수 형태로 저장할 변수
        answer = ""
        for i in B64_str:
            if i.isupper(): #대문자 A -> 0시작
                Binary_B64 += format(ord(i) - ord('A'),'b').zfill(6) #해당 문자->int 형 변환-> 6bit길이 2진수로
    
            elif i.islower(): #소문자 a -> 26시작
                Binary_B64 += format(ord(i) - ord('a') + 26,'b').zfill(6)
    
            elif i.isdigit():#숫자 0 -> 52시작
                Binary_B64 += format(ord(i) - ord('0') + 52,'b').zfill(6)
    
            elif i == '+':
                Binary_B64 += format(62,'b').zfill(6)
    
            elif i == '/':
                Binary_B64 += format(63,'b').zfill(6)
    
        for i in range(0,len(Binary_B64),8): #8bit씩 잘라서 아스키코드 문자로 변환
            answer += chr(int(Binary_B64[i:i+8],2)) #자른 8bit를 해당 아스키코드로 변환
    
        print(f'#{tc}',answer)

    정리

    1. 입력받은 문자열 한 글자씩 10진수로 변환 후, zfill(6)이용 6bit 2진수로 변환

    2. 이진수 문자열을 8bit씩 잘라서 10진수로 변환하고 그 아스키 코드로 변환

     

    사용한 메소드

    zfill() : 해당 자릿수 0 채우기

    isupper() : 대문자면 True, islower() : 소문자면 True, isdigit() : 숫자면 True

     

    base64 라이브러리 사용할 경우,

    from base64 import b64decode
     
    T = int(input())
    for tc in range(1, T + 1):
        word = input()
        res = b64decode(word).decode('UTF-8')
     
        print('#{} {}'.format(tc,res))

     

    라이브러리 사용할 경우, 처리 부분이 한 줄에 끝난다..


    굉장히 머리 써서 겨우 풀어냈는데 라이브러리 사용한 정답을 보고 굉장히 허탈했다.

    코딩 테스트를 위해서 파이썬의 라이브러리의 공부의 중요성을 다시 한번 느꼈다.

     

    그래도 SWEA에서 파이썬 코드들의 실행시간순 기록을 보니,

    858회 제출 기준 1등이었다...!

     

    난 아직 코테 초보자 입장이라 좀 놀랐다.

    노가다 해서 푼 보람이 있는 것 같다!

    728x90
    반응형

    댓글

Keydi's Tistory