SKYLIGHT STUDIO

[C++/1076] 저항 본문

Computer Programming/Coding Test(C++)

[C++/1076] 저항

SKY_L 2024. 10. 8. 18:25
전자 제품에는 저항이 들어간다. 저항은 색 3개를 이용해서 그 저항이 몇 옴인지 나타낸다. 처음 색 2개는 저항의 값이고, 마지막 색은 곱해야 하는 값이다. 저항의 값은 다음 표를 이용해서 구한다.
예를 들어, 저항의 색이 yellow, violet, red였다면 저항의 값은 4,700이 된다.

입력

첫째 줄에 첫 번째 색, 둘째 줄에 두 번째 색, 셋째 줄에 세 번째 색이 주어진다. 위의 표에 있는 색만 입력으로 주어진다.

출력

입력으로 주어진 저항의 저항값을 계산하여 첫째 줄에 출력한다.

 

black 0 1
brown 1 10
red 2 100
orange 3 1,000
yellow 4 10,000
green 5 100,000
blue 6 1,000,000
violet 7 10,000,000
grey 8 100,000,000
white 9 1,000,000,000

예를 들어, 저항의 색이 yellow, violet, red였다면 저항의 값은 4,700이 된다

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;

string s1;
string s2;
string s3;

long long Resistance(string s, int index) {

	if (s == "black") {
		if (index == 3) {
			return 1;
		}
		else {
			return 0;
		}
	}

	if (s == "brown") {
		if (index == 3) {
			return 10;
		}
		else {
			return (index < 2) ? 1 * 10 : 1;
		}
	}

	if (s == "red") {
		if (index == 3) {
			return 100;
		}
		else {
			return (index < 2) ? 2 * 10 : 2;
		}
	}

	if (s == "orange") {
		if (index == 3) {
			return 1000;
		}
		else {
			return (index < 2) ? 3 * 10 : 3;
		}
	}

	if (s == "yellow") {
		if (index == 3) {
			return 10000;
		}
		else {
			return (index < 2) ? 4 * 10 : 4;
		}
	}

	if (s == "green") {
		if (index == 3) {
			return 100000;
		}
		else {
			return (index < 2) ? 5 * 10 : 5;
		}
	}

	if (s == "blue") {
		if (index == 3) {
			return 1000000;
		}
		else {
			return (index < 2) ? 6 * 10 : 6;
		}
	}

	if (s == "violet") {
		if (index == 3) {
			return 10000000;
		}
		else {
			return (index < 2) ? 7 * 10 : 7;
		}
	}

	if (s == "grey") {
		if (index == 3) {
			return 	100000000;
		}
		else {
			return (index < 2) ? 8 * 10 : 8;
		}
	}

	if (s == "white") {
		if (index == 3) {
			return 	1000000000;
		}
		else {
			return (index < 2) ? 9 * 10 : 9;
		}
	}

}


int main()
{
	cin >> s1;
	cin >> s2;
	cin >> s3;

	cout << (Resistance(s1, 1) + Resistance(s2, 2)) * Resistance(s3, 3);
}


String 말고 순서를 의미하는 인덱스를 인자로 하나 더 받아오면 되는 방식이다.

암만 생각해도 이렇게 비효율적으로 푸는 게 아닌 것 같은데...

다른 방식으로는 해쉬코드도 있다던데, 한번 찾아봐야지.

'Computer Programming > Coding Test(C++)' 카테고리의 다른 글

[C++ 리바이브] Map  (2) 2024.10.30
[C++][1773] 폭죽쇼  (1) 2024.10.08
[C++][2547] 사탕 선생 고창영  (1) 2024.10.02
[C++ 리바이브] C++ 동적 배열  (0) 2024.10.02
[C++][1267] 핸드폰 요금  (0) 2024.10.01