250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 백준#BOJ#12865#평범한배낭
- 백준#BOJ#2615#오목
- 백준#boj#12755
- 백준#BOJ#8012#한동이는영업사원
- 백준#boj#16932#모양만들기
- 백준#BOJ#1939#중량제한
- 백준#BOJ#14501#퇴사#브루트포스
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[boj : 13273] 로마숫자 본문
문제 : 수가 주어지면 문자열로,문자열이 주어지면 수로 변환해서 출력해라
해설 : 천천히 조목조목 구현하면 된다.
#include<bits/stdc++.h>
using namespace std;
void solve();
string INT(string s);
int STR(string s);
int main()
{
int t;
cin >> t;
while (t--)
solve();
}
void solve()
{
string s;
cin >> s;
if ('0' <= s[0] && s[0] <= '9')
cout<<INT(s);
else
cout<<STR(s);
cout << "\n";
}
string INT(string s)
{
string ret = "";
for (int i = s.length()-1; i >= 0; i--) {
int n = s[i] - '0';
if (n >= 9) {
if (i == s.length() - 1)ret += "XI";
else if (i == s.length() - 2)ret += "CX";
else ret += "MC";
}
else if (n == 4) {
if (i == s.length() - 1)ret += "VI";
else if (i == s.length() - 2)ret += "LX";
else ret += "DC";
}
else if(n>=5){
if (i == s.length() - 1) {
for (int i = 0; i < n - 5; i++)
ret += 'I';
ret += 'V';
}
else if (i == s.length() - 2) {
for (int i = 0; i < n - 5; i++)
ret += 'X';
ret += 'L';
}
else if (i == s.length() - 3) {
for (int i = 0; i < n - 5; i++)
ret += 'C';
ret += 'D';
}
}
else {
if (i == s.length() - 1) {
for (int i = 0; i < n; i++)
ret += 'I';
}
else if (i == s.length() - 2) {
for (int i = 0; i < n; i++)
ret += 'X';
}
else if (i == s.length() - 3) {
for (int i = 0; i < n; i++)
ret += 'C';
}
else {
for (int i = 0; i < n; i++)
ret += 'M';
}
}
}
reverse(ret.begin(), ret.end());
return ret;
}
int STR(string s)
{
int ret = 0;
for (int i = s.length() - 1; i >= 0; i--) {
if (s[i] == 'I') {
if (i != s.length() - 1 && (s[i + 1] == 'X' || s[i+1]=='V'))
ret -= 1;
else ret += 1;
}
else if (s[i] == 'X') {
if (i != s.length() - 1 && (s[i + 1] == 'C' || s[i+1]=='L'))
ret -= 10;
else ret += 10;
}
else if (s[i] == 'C') {
if (i != s.length() - 1 && (s[i + 1] == 'M' || s[i+1]=='D'))
ret -= 100;
else ret += 100;
}
else if (s[i] == 'V')ret += 5;
else if (s[i] == 'L')ret += 50;
else if (s[i] == 'D')ret += 500;
else ret += 1000;
}
return ret;
}
'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글
[boj : 11565] 바이너리 게임 (0) | 2020.12.23 |
---|---|
[boj : 12904] A와 B (0) | 2020.12.23 |
[boj : 4803] 트리 (0) | 2020.12.22 |
[boj : 1833] 고속철도 설계하기 (0) | 2020.12.22 |
[boj : 12739] 돌림판(small) (0) | 2020.12.22 |