어렵다고 생각했는데 어떻게 변수를 잘 저장하고 사용하느냐를 물어보는 듯한 문제였다.
token[][3] = {"IV", "XL", "CD", "M"};
이렇게 저장하는 게 핵심이었던 것 같다.
코드
#include <bits/stdc++.h>
using namespace std;
char s[11], token[][3] = {"IV", "XL", "CD", "M"}; // 4, 40, 400, 1000
int roman[90], ans = 0;
const int divs = 1000, zerocnt = 3;
int main()
{
cin.tie(0);
ios_base::sync_with_stdio(false);
roman['I'] = 1,
roman['V'] = 5,
roman['X'] = 10,
roman['L'] = 50,
roman['C'] = 100,
roman['D'] = 500,
roman['M'] = 1000;
for (int i = 2; i--;)
{
scanf("%s", s);
for (int j = 0; s[j]; ++j)
ans += (s[j + 1] && roman[s[j]] < roman[s[j + 1]] ? -roman[s[j]] : roman[s[j]]);
}
printf("%d\n", ans);
for (int i = divs, j = zerocnt; i != 0; i /= 10, j--)
{
const int divbyI = ans / i;
if (divbyI == 9)
printf("%c%c", token[j][0], token[j + 1][0]);
else if (divbyI == 4)
printf("%c%c", token[j][0], token[j][1]);
else if (divbyI >= 5)
{
putchar(token[j][1]);
for (int k = 5; k < divbyI; ++k)
putchar(token[j][0]);
}
else
{
for (int k = 0; k < divbyI; ++k)
putchar(token[j][0]);
}
ans %= i;
}
return 0;
}
'온라인저지' 카테고리의 다른 글
[BOJ] 2609번: 최대공약수와 최소공배수 (0) | 2018.07.13 |
---|---|
[BOJ] 10800번: 컬러볼 (0) | 2018.07.13 |
[BOJ] 2589번: 보물섬 (0) | 2018.07.13 |
[BOJ] 2607번: 비슷한 단어 (0) | 2018.07.12 |
[BOJ] 11048번: 이동하기 (0) | 2018.06.04 |
[BOJ] 1932번: 정수 삼각형 (0) | 2018.06.04 |
댓글