[BOJ][구현][브4][1212] 8진수2진수

문제 링크

문제링크

맘에드는 풀이

알고리즘

다음과 같은 꼴은 배열로 간단하게 정리할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
string calc(const char &c) {
  if (c == '7') return "111";
  else if (c == '6') return "110";
  else if (c == '5') return "101";
  else if (c == '4') return "100";
  else if (c == '3') return "011";
  else if (c == '2') return "010";
  else if (c == '1') return "001";
  else if (c == '0') return "000";
}

배열을 사용해서 0~7인 경우를 저장해두고 사용합니다. 출력할 때 앞에 0이 붙은 것만 판단해서 잘라서 출력합니다. substr을 사용해도 되고, erase를 사용해도 됩니다.

substr 정답 코드

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
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;

string arr[8] = {
  "000",
  "001",
  "010",
  "011",
  "100",
  "101",
  "110",
  "111"
};

int main()
{
  //freopen("input.txt", "r", stdin);
  ios_base::sync_with_stdio(0); cin.tie(0);
  string s; cin >> s;
  int sLen = s.size();
  string ans = "";
  for (int i = 0; i < sLen; ++i) {
    ans += arr[s[i] - '0'];
  }
  if (ans[0] == '0' && ans[1] == '0') {
    cout << ans.substr(2, ans.size());
  }
  else if(ans[0] == '0') {
    cout << ans.substr(1, ans.size());
  }
  else {
    cout << ans << "\n";
  }
  return 0;
}

erase 정답 코드

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
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;

string arr[8] = {
  "000",
  "001",
  "010",
  "011",
  "100",
  "101",
  "110",
  "111"
};

int main()
{
    //freopen("input.txt", "r", stdin);
    ios_base::sync_with_stdio(0); cin.tie(0);
    string s; cin >> s;
    int sLen = s.size();
    string ans = "";
    for (int i = 0; i < sLen; ++i) {
        ans += arr[s[i] - '0'];
    }
    if (ans[0] == '0' && ans[1] == '0') {
        ans.erase(0, 2);
    }
    else if (ans[0] == '0') {
        ans.erase(0, 1);
    }
     cout << ans << "\n";
    return 0;
}

Success Notice: 수고하셨습니다. :+1:

Leave a comment