[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: 수고하셨습니다.
Leave a comment