문제
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PR4DKAG0DFAUq
풀이
문제의 내용을 요약하면 다음과 같다.
<Encoding> 8bit 3글자 -> 6bit 4글자
<Decoding> 6bit 4글자 -> 8bit 3글자
문제에서는 인코딩된 결과값을 주고 다시 디코딩하라고 하였다.
리스트를 이용하여 [표1]을 저장한다. 그리고 입력되는 문자열의 각 글자를 대응하는 값을 6bit씩 연결하고 24bit가 될때마다 8bit 씩 잘라서 아스키코드로 변환한뒤 출력한다.
코드
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Character> list = new ArrayList<>();
for(int i=0;i<26;i++) {
list.add((char) ('A'+i));
}
for(int i=0;i<26;i++) {
list.add((char) ('a'+i));
}
for(int i=0;i<10;i++) {
list.add((char)(i+'0'));
}
list.add('+');
list.add('/');
int T = Integer.parseInt(br.readLine());
for(int test_case = 1; test_case <= T; test_case++)
{
String str = br.readLine();
String ans = "";
for(int i=0;i<str.length()/4;i++) {
int b = 0;
for(int j=i*4;j<(i*4)+4;j++) {
char ch = str.charAt(j);
b = (b << 6) | (list.indexOf(ch));
}
for(int j=2;j>=0;j--) {
char ch = (char) ((b & (255 << 8*j)) >> 8*j);
ans += ch;
}
}
System.out.println("#"+test_case+" "+ans);
}
}
}