처음 생각했을 땐, 오 쉬운데 했다.
근데 2진수에서 8진수로 바꿔야 하니깐.
지금 연습하고 있는 c++언어로 하기로 했다.
먼저 내 생각은 문자열로 받아서
10개의 길이를 받는다면,
만약
1 0 1 1 0 1 1 0 1 0
을 받는다면
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 |
1 | 3 | 3 | 2 |
이렇게 바꿔야 한다.
그래서 나는 계산을 해보았다,
사이즈를 가지고 처음부터 계산을 해보자 해서
일단 그럼 1 2 4를 가지는 배열(eight)을 정해놓고 이용하자라는 생각이 들었다.
(size - i) % 3을 하면 1이 남으니깐,
계산하기 위해 정해놓은 배열(eight)의 eight [0] == (1)이 된다.
그런데 eight의 방은 0번방인데, (size - i) % 3 은 1이 나오니깐 단순히 -1을 하기에는
size가 10일때 i가 4이면,
(size - i) % 3 => 0이 나오는데 나의 의도로는 2가 나와야 한다.
그래서 (((size - i) % 3 ) +2 )%3 을 해줬다.
2를 넘으면 안 돼서 ,,,
그렇게 3자리를 더하고
만약 (size - i) % 3 이 1이 나오면 == {1, 2, 4}에서 1까지 다 더한 후라면
다 더한 값을 vector를 통해 뒷부분에 넣었다.
그랬더니 한번에 통과!
소스 코드
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string input;
vector<int> answer;
int eight[4] = { 1,2,4};
int size;
int sum = 0;
//문자 받기
cin >> input;
size = input.length();
for (int i =0; i <size; i++) {
if (input[i] == '1') {
sum += ((input[i]-'0') * eight[(((size - i) % 3) + 2) % 3]);
}
if ((size - i) % 3 == 1) {
answer.push_back(sum);
sum = 0;
}
}
for (int i = 0; i < answer.size(); i++) {
cout << answer[i];
}
return 0;
}
c++을 잘 안써봐서
많이 필요 없는 부분이 있을 수 있는데,
그래도 쓰고 통과해서 좋았다.
'Coding Test > Problem_solving' 카테고리의 다른 글
[백준] 9237_이장님 초대 (c++) (0) | 2021.06.16 |
---|---|
[백준] 2304 창고 다각형 c++ (0) | 2021.04.08 |
[백준] 10808 알파벳 개수 (0) | 2021.03.09 |
[백준] 1874_스택 수열 (0) | 2021.02.18 |
[백준] 9012_괄호 (0) | 2021.02.18 |