[BOJ] 1076 저항

GirlFriend-Yerin·2020년 8월 27일
0

알고리즘

목록 보기
65/131

Note

저항에 있는 색 3개를 가지고 현재 저항의 값이 몇인지 출력 하는 문제

현실의 저항에서 오차 범위를 제외한 문제
역시 수학보다는 문자열 처리가 조금 더 알맞지 않을까 하는 문제이다.
색의 첫번째 두번째는 두자리 수의 각각 10의 자리 1의 자리를 의미하고 세번째 자리는 10의 거듭제곱 값을 의미한다.
문자열 처리는 각각 전부 비교해주는 함수를 사용해도 되지만 이번에는 각각 자리를 기준으로 겹치지 않는 경우로 만든 nested-if문을 사용했다.

출력을 int 값을 사용하면 21억이 넘는 경우가 존재 하기 때문에 overflow가 발생한다.

알고리즘

  1. 문자열 3개를 입력 받는다.
  2. 문자열의 값을 받아오는 함수에 각각의 문자열을 매개변수로 넣어 해당 문자열의 값을 받아온다.
    1. 문자열의 0번 인덱스가 b인 경우 2번 인덱스를 기준으로 a / o / u에 따라 해당 값을 반환한다.
    2. 문자열의 0번 인덱스가 g인 경우 3번 인덱스를 기준으로 e / y 에 따라 해당 값을 반환한다.
    3. 문자열의 0번 인덱스가 일치 하는 값을 반환한다.
  3. 계산 공식에 맞춰 계산 후 출력한다.

소스코드

#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에서 작성되었습니다.

profile
개발할때 가장 행복한 개발자입니다.

0개의 댓글