[Algorithm] 31. 탄화수소 질량

 

인트로

문제 자체는 심플하지만 결과를 도출하기 위해 여러 조건을 검사해야 하는 문제를 소개하려 한다.

탄화수소 질량 구하기

문제

탄소(C)와 수소(H)로만 이루어진 화합물을 탄화수소라고 합니다.
탄소(C) 한 개의 질량은 12g, 수소(H) 한 개의 질량은 1g입니다.

에틸렌(C2H4)의 질량은 12*2+1*4=28g입니다.
메탄(CH4)의 질량은 12*1+1*4=16g입니다.

탄화수소 식이 주어지면 해당 화합물의 질량을 구하는 프로그램을 작성하세요.

※ 입력설명
첫 줄에 탄화수소식이 주어집니다.
식의 형태는 CaHb 형태이며 (1<=a, b<=100)이다.
단 a 나 b 가 1이면 숫자가 식에 입력되지 않는다. 예) CH4

※ 출력설명
첫 줄에 탄화수소의 질량을 출력합니다.

입력 #1

C2H4

출력 #1

28

 

 

 

입력 #2

CH4

출력 #2

16

코드 설명

 

경우의 수만 잘 따지면 해결할 수 있는 문제이다.

 

[경우의 수]

(1) C2H4 : 탄소 원자와 수소 원자가 모두 두 개 이상인 경우

(2) CH4 : 탄소원자 한 개와 두 개 이상의 수소 원자로 이루어진 경우

(3) C2H : 탄소원자 두 개 이상과 수소 원자 한 개로 이루어진 경우

 

[프로그래밍 관점]

(1) string의 두 번째 문자에 탄소 원자의 개수가 저장된 케이스 또는 'H'가 저장된 케이스를 판별한다.

(2) 'H' 바로 다음 '\0'(널문자)가 저장된 케이스 또는 수소 원자의 개수가 저장된 케이스를 판별한다.

 

#include <iostream>
#include <vector>

using namespace std;

int main()
{
	string str;
	int hCount = 0, cCount = 0, res = 1, pos;

	cin >> str;

	if (str[1] == 'H')
	{
		cCount = 1;
		pos = 1;
	}
	else
	{
		int i;
		for (i = 1; str[i] != 'H'; i++)
		{
			cCount = cCount * 10 + (str[i] - '0');
		}
		pos = i;
	}

	if (str[pos + 1] == '\0')
	{
		hCount = 1;
	}
	else
	{
		for (int j = pos + 1; str[j] != '\0'; j++)
		{
			hCount = hCount * 10 + (str[j] - '0');
		}
	}

	res = cCount * 12 + hCount;
	cout << res;
}