순간을 성실히, 화려함보단 꾸준함을

[boj : 13273] 로마숫자 본문

알고리즘,SQL/백준,BOJ

[boj : 13273] 로마숫자

폭발토끼 2020. 12. 23. 15:04

www.acmicpc.net/problem/13273

 

13273번: 로마숫자

각 테스트 케이스에 대해서 로마 숫자가 주어지면 그 숫자에 해당하는 아라비아 숫자를 출력하고, 아라비아 숫자가 주어지면 그 숫자에 해당하는 로마 숫자를 출력하여라.

www.acmicpc.net

문제 : 수가 주어지면 문자열로,문자열이 주어지면 수로 변환해서 출력해라

 

해설 : 천천히 조목조목 구현하면 된다.

 

#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