-
[SWEA D2-1928] Base64 Decoder - Python알고리즘/SWEA 2022. 11. 13. 21:55728x90
#인코딩 하기 ''' 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반응형'알고리즘 > SWEA' 카테고리의 다른 글
[SWEA D2] 1208. [S/W 문제해결 기본] 1일차 - Flatten, Python 풀이 (0) 2022.12.20 [SWEA D3] 1206. [S/W 문제해결 기본] 1일차 - View, Python 풀이 (0) 2022.12.20 [SWEA] D2 - Python 풀이 (0) 2022.12.20