본문 바로가기

Algorithm/Mathematics

BaekJoon 1076 저항

Link https://www.acmicpc.net/problem/1076

소스결과 2004 KB / 0 ms

출처 Baekjoon 

언어 C++ 17

분류 수학

 

설명

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

 

현실의 저항에서 오차 범위를 제외한 문제

역시 수학보다는 문자열 처리가 조금 더 알맞지 않을까 하는 문제이다.

색의 첫번째 두번째는 두자리 수의 각각 10의 자리 1의 자리를 의미하고 세번째 자리는 10의 거듭제곱 값을 의미한다.

문자열 처리는 각각 전부 비교해주는 함수를 사용해도 되지만 이번에는 각각 자리를 기준으로 겹치지 않는 경우로 만든 nested-if문을 사용했다.

 

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

 

알고리즘

1. 문자열 3개를 입력 받는다.

2. 문자열의 값을 받아오는 함수에 각각의 문자열을 매개변수로 넣어 해당 문자열의 값을 받아온다.

 2 - 1. 문자열의 0번 인덱스가 b인 경우 2번 인덱스를 기준으로 a / o / u에 따라 해당 값을 반환한다.

 2 - 2. 문자열의 0번 인덱스가 g인 경우 3번 인덱스를 기준으로 e / y 에 따라 해당 값을 반환한다.

 2 - 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;
}

 

'Algorithm > Mathematics' 카테고리의 다른 글

BaekJoon 1356 유진수  (0) 2019.01.29
BaekJoon 1074 Z  (0) 2019.01.29
BaekJoon 1652 누울 자리를 찾아라  (0) 2019.01.21
BackJoon 1978 소수 찾기  (0) 2019.01.21
BaekJoon 1094 막대기  (0) 2019.01.10