#include <iostream>
#include <deque>
#include <string>
#include <math.h>
using namespace std;
/*
1. 문자열을 받는다. 이 문자열은 엔터키 또한 받아내야 한다.
2. 스페이스바(공백)를 기준으로 덱에 넣는다.
공백이 홀수개면 0, 짝수개면 1을 넣는다.
3. 해당 덱은 5개씩 끊어내며, 만약 마지막 5의 배수로
받아내지 못할경우 5의 배수로 끝나도록 맨 마지막에 0을 넣는다.
4 해당 덱을 이진수로 변환하여 테이블표대로 출력한다.
*/
int main(void){
deque<int> dq;
while(1)
{
string temp;
getline (cin, temp);
if(temp.size()==1&&temp=="#")
break; // 아예 종료한다.
else if (temp.size()==1&&temp=="*")
{
// else에서 시행했던 문장을 출력해준다.
while(1) // dq를 5개씩 만들어야 한다.
{
if(dq.size()%5==0)
break;
dq.push_back(0);
}
while(1)
{
if (dq.empty())
break;
int num = 0;
// 우선 2진법으로 완료 해야 한다.
for(int i=0; i<5; i++)
{
num += pow(2,4-i) * dq.front();
dq.pop_front();
}
if(num == 0)
cout << " ";
else if( 1<= num && num<=26)
cout << char('A'-1+num);
else if(num==27)
cout << "'";
else if(num==28)
cout << ",";
else if(num==29)
cout <<"-";
else if(num==30)
cout << ".";
else if(num==31)
cout<< "?";
}
cout << endl;
dq.clear();
}
else
{
//출력할 문장을 적는다
int conse=0; // 연속적인 스페이스바의 숫자
for(int i=0; i<temp.size(); i++)
{
if(temp[i]==' ') // 문자 char
conse ++;
else
{
if(conse&&conse%2==1) // 홀
dq.push_back(0);
else if(conse&&conse%2==0) // 짝
dq.push_back(1);
conse = 0;
}
}
// 끝났을 때도 고려해야한다. 저 위 케이스에 들어가지 못한다.
if(conse)
{
if (conse%2==1)
dq.push_back(0); // 홀
else if(conse%2==0) // 짝
dq.push_back(1);
conse = 0;
}
}
}
return 0;
}
'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글
#1712번 손익분기점 (c++) (0) | 2020.02.12 |
---|---|
#1316번 그룹단어체커 (c++) (0) | 2020.02.11 |
#1065번 한수 (c++) (0) | 2020.02.08 |
#4673번 셀프넘버 (c++) (0) | 2020.02.08 |
#1008번 A/B (c++) (0) | 2020.01.14 |