관리 메뉴

Kim's Programming

1928. Base64 Decoder 본문

SW ExpertAcademy/D2

1928. Base64 Decoder

Programmer. 2018. 12. 1. 00:24

1928. Base64 Decoder

문제출처: https://www.swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PR4DKAG0DFAUq&categoryId=AV5PR4DKAG0DFAUq&categoryType=CODE




풀이 방법



<코드>


#include<iostream>
#include<cstring>
using namespace std;

int SixbitConverterCharToInt(char c)
{
	if (48 <= c && c <= 57) return c + 4;		//1
	if (65 <= c && c <= 90) return c - 65;		//A
	if (97 <= c && c <= 122) return c - 71;		//a
	if (c == 47) return 62;						// +
	if (c == 43) return 63;						// / 
	return -1;
}


void Convert(char* encoded, char* decoded)
{
	int dataArray[4]{ 0, };

	for (int i = 0; i < 4; i++)
		dataArray[i] = SixbitConverterCharToInt(encoded[i]);

	decoded[0] = (char)((dataArray[0] << 2) + (dataArray[1] >> 4));
	decoded[1] = (char)((dataArray[1] << 4) + (dataArray[2] >> 2));
	decoded[2] = (char)((dataArray[2] << 6) + (dataArray[3]));
}

int main(int argc, char** argv)
{
	int test_case;
	int T;
	cin >> T;

	for (test_case = 1; test_case <= T; ++test_case)
	{
		char string[100000 + 1];
		std::cin >> string;
	
		char* pointer = string;
		int length = strlen(string);

		std::cout << "#" << test_case << " ";
		for (int i = 0; i < length / 4; i++)
		{
			char read[4]{ 0, };
			Convert(pointer, read);
			std::cout << read;
			pointer += 4;
		}

		std::cout << "\n";
	}

	return 0;//정상종료시 반드시 0을 리턴해야합니다.
}

'SW ExpertAcademy > D2' 카테고리의 다른 글

1945. 간단한 소인수분해  (0) 2018.12.01
1940. 가랏! RC카!  (0) 2018.12.01
1288. 새로운 불면증 치료법  (0) 2018.12.01
1285. 아름이의 돌 던지기  (0) 2018.11.30
1284. 수도 요금 경쟁  (0) 2018.11.30