이 문제는 문제 조차 이해하지 못해서 구글링해서 찾아봤다.
(참고: https://zetawiki.com/wiki/SWEA_1928_Base64_Decoder)
- Base64 Encoding: 8bit X 3글자 → 6bit X 4글자 변환
- Base64 Decoding: 6bit X 4글자 → 8bit X 3글자 변환
Base64는 말그대로 64진수(6bit=2^6=64)로 변환하는 의미라고 한다.
Base64 Encoding을 하면 제어문자와 같이 바이너리를 직접 표시하면 읽을 수 없는 문자들을 알파벳, 숫자, 기호와 같이 읽을 수 있는 문자로 바꿔주고, URL 파라미터로 처리하는 것이 간편해지는 장점이 있다고 한다.
단점이라면 3글자를 4글자로 바꾸므로 크기가 33% 정도 증가한다는 점이 있다고 한다.
사실 나는 아직도 이해하지 못했다...T_T
#include <iostream>
#include <ios>
using namespace std;
int T, m[128];
char encoded[100000], decoded[100000];
void init();
void decode(char* src, char* dst);
int main() {
cin.tie(0); ios::sync_with_stdio(0);
init();
cin >> T;
for (int tc = 1; tc <= T; tc++) {
cin >> encoded;
decode(encoded, decoded);
cout << '#' << tc << ' ' << decoded << "\n";
}
}
void init() {
for (int i = 0; i<26; i++) m['A' + i] = i;
for (int i = 0; i<26; i++) m['a' + i] = 26 + i;
for (int i = 0; i<11; i++) m['0' + i] = 52 + i;
m['+'] = 62;
m['/'] = 63;
}
void decode(char* src, char* dst) {
int bits, pos = 0, pos2 = 0;
while (src[pos]) {
bits = m[src[pos++]] << 18;
bits += m[src[pos++]] << 12;
bits += m[src[pos++]] << 6;
bits += m[src[pos++]];
dst[pos2++] = bits >> 16 & 0xFF;
dst[pos2++] = bits >> 8 & 0xFF;
dst[pos2++] = bits & 0xFF;
}
dst[pos2] = 0;
}
'알고리즘 > SWEA' 카테고리의 다른 글
SW 문제해결 기본 - Array 1 (0) | 2019.04.27 |
---|---|
[SWEA] 1289. 원재의 메모리 복구하기 (0) | 2019.04.27 |
[SWEA] 1288. 새로운 불면증 치료법 (0) | 2019.04.25 |
[SWEA] 1859. 백만 장자 프로젝트 (0) | 2019.04.24 |
[SWEA] 1979. 어디에 단어가 들어갈 수 있을까 (0) | 2019.04.22 |
댓글