SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
📌 작성한 코드(참고)
dic = ['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 a in range(1, T + 1):
word = list(input())
s = ''
for i in range(len(word)):
num = dic.index(word[i])
bin_num = str(bin(num)[2:])
while len(bin_num) < 6:
bin_num = '0' + bin_num
s += bin_num
result = ''
for x in range(len(word) * 6 // 8):
n = int(s[x*8 : x*8+8],2)
result += chr(n)
print(f'#{a} {result}')
📌 풀이

Encoder가 작동하는 방식을 보면 이렇게 작동하고 있음을 알 수 있다
1. 글자를 2진수로 변경한다
2. 24비트 버퍼에 넣는다
3. 6비트씩 자른다
4. 6비트씩 자른 2진수를 다시 10진수로 변경한다
5. 해당 10진수에 해당하는 값을 표에서 찾아서 바꿔준다.
그렇다면 Decoder는 반대로 작동하면 된다
1. 현재 문자를 10진수로 바꿔준다.(표를 통해서)
2. 10진수를 2진수로 변경한다.
3. 2진수로 바꾼 값을 8비트씩 자른다.
4. 8비트씩 자른 값을 10진수로 바꿔준다
5. 아스키코드에 해당하는 값으로 10진수를 바꿔준다.
1. 현재 문자를 10진수로 바꿔준다.
- 표를 이용해서 바꿔주기 위해서 dic에 표의 내용을 입력하고, dic을 통해 숫자로 변경해준다
T = int(input())
for a in range(1, T + 1):
word = list(input()) // 디코딩할 문자들을 배열로 받기
s = '' // 디코딩된 문자들을 저장할 변수
for i in range(len(word)): // 디코딩할 문자의 길이만큼 반복해야 하니까
num = dic.index(word[i])// index를 통해서 위치 찾기
2. 10진수를 2진수로 변경하기
- bin() 메서드를 사용하면 2진수로 바꿔줄 수 있다.
- 그리고 이렇게 변경하게 되면 앞에 0b와 같이 몇진수인지 알려주는 문자열이 붙는데, 이를 제거하기 위해서 [2:] 해준다
bin_num = str(bin(num)[2:])
- 이렇게 변경하면 1인 경우에 000001로 안나오고 그냥 1로 나와서 6비트가 될 때까지 앞에 0을 채워준다.
while len(bin_num) < 6:
bin_num = '0' + bin_num
-> 이렇게 다 채운 다음에 s에 변경된 값을 저장해준다.
s += bin_num
3. 2진수로 바꾼 값을 8비트씩 자른다.
4. 8비트씩 자른 값을 10진수로 바꿔준다
5. 아스키코드에 해당하는 값으로 10진수를 바꿔준다.
- 글자 하나가 6비트의 2진수로 바뀌었고, 해당 글자들을 8비트로 자를거니까 (글자들 모인 길이) * 6 // 8 해서 반복될 횟수를 정해준다.
- 인덱스를 통해 8자리씩 잘라주고, int를 이용해서 해당 2진수를 10진수로 변경해준다.
- chr()을 이용해서 해당 8비트를 아스키 코드로 변경해준다
result = ''
for x in range(len(word) * 6 // 8):
n = int(s[x*8 : x*8+8],2)
result += chr(n)

참고)
https://velog.io/@hrlrh/SWEA-1928.-Base64-Decoder
[SWEA] 1928. Base64 Decoder
문제 입력으로 Base64 Encoding 된 String 이 주어졌을 때, 해당 String 을 Decoding 하여, 원문을 출력하는 프로그램을 작성하시오.
velog.io
'알고리즘 > SWEA' 카테고리의 다른 글
| [Python] SWEA D2 : 2005 - 파스칼의 삼각형 (0) | 2023.10.28 |
|---|---|
| [Python] SWEA D2 : 2007 - 패턴 마디의 길이 (1) | 2023.10.28 |
| [Python] SWEA D2 : 1926 - 간단한 369게임 (0) | 2023.10.28 |
| [Python] SWEA D2 : 1288 - 새로운 불면증 치료법 (0) | 2023.10.27 |
| [Python] SWEA D2 : 1204 - 최빈수 구하기 (0) | 2023.10.27 |