https://www.acmicpc.net/problem/1373
<코드>
#include <iostream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
string s;
cin>>s;
int n = s.size();
if(n%3==1) cout<<s[0]; // MSB를 의미 : 가장 왼쪽 비트
else if(n%3==2) cout<<(s[0]-'0')*2+s[1]-'0';//MSB와, 그 다음 비트 의미
for(int i=n%3;i<n;i+=3)
{
cout<<(s[i]-'0')*4+(s[i+1]-'0')*2+(s[i+2]-'0');
}
}
<풀이과정>
가장 왼쪽 3비트가 비트수=1 가장 왼쪽 비트 하나 출력
비트수=2 가장 왼쪽 비트 하나 + 가장 왼쪽 비트와 한칸 떨어진 오른쪽 비트 하나 출력
문자 => 숫자 변환 문자 - '0'을 해주면 된다 !
숫자 => 문자 변환 숫자 + '0'을 해주면 된다 !
stoi, to_string 함수도 있지만 저거도 알아두면 유용하게 쓰일 것 같다고 생각했다.
'PS > 문자열 알고리즘[String]' 카테고리의 다른 글
백준 11656 접미사 배열(c++) (1) | 2022.07.08 |
---|---|
백준 1212 8진수 2진수(c++) (0) | 2022.07.06 |
백준 14425 문자열 집합(c++) (0) | 2022.07.06 |
백준 5525 IOIOI(c++) (0) | 2022.07.05 |
백준 1764 듣보잡(c++) (0) | 2022.07.04 |