2진수를 8진수로 바꾸어서 푸는 문제 은근 코드가 손이가고 메모리도 크고 시간도 많이잡아먹었다.. 내 연산이 좀 비효율적이었나.. 데이터 크기는 최대 1,000,000개의 1과 0으로 이루어진 2진수이다. 문제를 볼 때 빨리 풀고 싶어서 시간복잡도를 계산안하고 무식하게 푸는 방법을 많이 썼는데 시간복잡도를 항상 풀기 이전의 계산하는게 중요하다고 했다.. 그래야 코딩을 할 지 안 할지 결정할 수 있기 때문이다. 이중 for 문도 없고 push back pop back, back 같이 아직 stl을 깊게 탐구하지 않았지만 그렇게 시간복잡도를 증가시키는 연산이 없는 거 같아서 예상 시간복잡도는 O(n)이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
    string two_byte;
    cin >> two_byte;
    int size = two_byte.size();
    if (size % 3 == 1)
    {
        if (two_byte.front() == '0')
        {
            cout << 0 << endl;
            return 0;
        }
        cout << int(two_byte.front() - '0');
        two_byte.erase(01);
    }
    if (size % 3 == 2)
    {
        int first = int(two_byte.front() - '0');
        two_byte.erase(01);
        int second = int(two_byte.front() - '0');
        two_byte.erase(01);
        cout << first * 2 + second * 1;
    }
    size = two_byte.size()/3;
    vector<int> reverse_num;
    for (int i = 0; i < size++i)
    {
        int third = int(two_byte.back() - '0');
        two_byte.pop_back();
        int second = int(two_byte.back() - '0');
        two_byte.pop_back();
        int first = int(two_byte.back() - '0');
        two_byte.pop_back();
        int data = first * 4 + second * 2 + third * 1;
        reverse_num.push_back(data);
    }
    size = reverse_num.size();
    for (int i = 0; i < size++i)
    {
        cout << reverse_num.back();
        reverse_num.pop_back();
    }
    return 0;
}
cs


'백준 온라인 저지' 카테고리의 다른 글

백준 1929: 소수구하기(충격의 endl)  (0) 2018.07.13
백준 1978: 소수 찾기  (0) 2018.07.13
백준 11005: 진법변환2  (0) 2018.07.13
백준 2225: 합분해  (0) 2018.07.10
백준 2133: 타일 채우기  (0) 2018.07.10

+ Recent posts