저항에 있는 색 3개를 가지고 현재 저항의 값이 몇인지 출력 하는 문제
현실의 저항에서 오차 범위를 제외한 문제
역시 수학보다는 문자열 처리가 조금 더 알맞지 않을까 하는 문제이다.
색의 첫번째 두번째는 두자리 수의 각각 10의 자리 1의 자리를 의미하고 세번째 자리는 10의 거듭제곱 값을 의미한다.
문자열 처리는 각각 전부 비교해주는 함수를 사용해도 되지만 이번에는 각각 자리를 기준으로 겹치지 않는 경우로 만든 nested-if문을 사용했다.
출력을 int 값을 사용하면 21억이 넘는 경우가 존재 하기 때문에 overflow가 발생한다.
#include <iostream>
#include <cmath>
using namespace std;
int value(char* word)
{
const char color[10][5] = { "bla", "bro", "r", "o", "y", "gree", "blu", "v", "grey", "w" };
if (word[0] == 'b')
{
if (word[2] == 'a')
return 0;
else if (word[2] == 'o')
return 1;
else
return 6;
}
else if (word[0] == 'g')
{
if (word[3] == 'e')
return 5;
else
return 8;
}
else
{
for (int i = 0; i < 10; i++)
if (word[0] == color[i][0])
return i;
}
return -1;
}
int main()
{
char words[3][7] = {};
for (int i = 0; i < 3; i++)
cin >> words[i];
long long res = (value(words[0]) * 10 + value(words[1])) * powl(10, value(words[2]));
cout << res;
return 0;
}
2019-01-21 11:00:00에 Tistory에서 작성되었습니다.