출처 : https://swexpertacademy.com/main/solvingProblem/solvingProblem.do
Encoding 순서 는 다음과 같다.
1. 우선 24비트 버퍼에 위쪽(MSB)부터 한 byte씩 3 byte의 문자를 집어넣는다.
2. 버퍼의 위쪽부터 6비트씩 잘라 그 값을 읽고, 각각의 값을 아래 [표-1] 의 문자로 Encoding 한다.
문제 는 다음과 같다.
입력으로 Base64 Encoding 된 String 이 주어졌을 때, 해당 String 을 Decoding 하여, 원문을 출력하는 프로그램을 작성하시오.
즉, 인코딩된 string 을 인코딩 과정의 역순으로 진행하여, 원문을 출력해야 한다.
Step 1
먼저, input 의 각 문자는 어떤 값을 표1의 문자로 인코딩 한 것이다.
따라서 문자를 표에 있는 값으로 변경하면 된다.
또한, 값을 6비트씩 잘라 값을 읽은 것이므로, 값을 6비트 2진수 문자열로 변경해야 한다.
ex) T : 19 -> 010011 / G : 6 -> 000110
이렇게 모든 각각의 문자에 대해 위와 같은 과정을 거치면, 이진수 문자열이 이어진 형태가 될 것이다.
ex) 010011000110 ....
Step 2
이진수 문자열이 이어진 형태는 원래 한 byte 씩 문자를 집어넣은 결과값이다.
따라서 이진수 문자열을 8자리씩 끊어 해당값을 문자로 변경해야 한다.
ex) 01001100 / 0110...
-> 01001100 을 아스키코드로 변경하면 L이 된다.
나의 코드
encode = ["A","B","C","D","E","F","G","H","I","J","K","L","M",
"N","O","P","Q","R","S","T","U","V","W","X","Y","Z",
"a","b","c","d","e","f","g","h","i","j","k","l","m",
"n","o","p","q","r","s","t","u","v","w","x","y","z",
"0","1","2","3","4","5","6","7","8","9","+","/"]
T = int(input())
for t in range(1,T+1) :
s = input()
length = len(s)
tmp = ''
for i in range(len(s)) :
num = encode.index(s[i])
bin_num = bin(num)[2:]
while len(bin_num) < 6 :
bin_num = "0" + bin_num
tmp += bin_num
answer = ''
for i in range(length*6//8) :
c = int(tmp[i*8:i*8+8],2)
answer += chr(c)
print(f"#{t} {answer}")
'알고리즘 > 이것저것' 카테고리의 다른 글
[swea] 7584번: 자가 복제 문자열 - 파이썬(python) (0) | 2022.11.06 |
---|---|
[swea] 14413번: 격자판 칠하기 - 파이썬(python) (0) | 2022.11.01 |
[프로그래머스] 약수의 개수와 덧셈 - 파이썬(python) (0) | 2022.09.26 |
[프로그래머스] 키패드 누르기 - 파이썬(python) (0) | 2022.09.26 |
[프로그래머스] 크레인 인형뽑기 게임 (0) | 2022.09.26 |
댓글