탄화수소 질량


탄소(C)와 수소(H)로만 이루어진 화합물을 탄화수소라고 합니다.

탄소(C) 한 개의 질량은 12g, 수소(H) 한 개의 질량은 1g입니다.

에틸렌(C2H4)의 질량은 122+14=28g입니다.

메탄(CH4)의 질량은 121+14=16g입니다.

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

▣ 입력설명
첫 줄에 탄화수소식이 주어집니다. 
식의 형태는 CaHb 형태이며 (1<=a, b<=100)이다.

단 a 나 b 가 1이면 숫자가 식에 입력되지 않는다. 예) CH4

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

▣ 입력예제 1 
C2H4

▣ 출력예제 1
28

▣ 입력예제 2
CH4

▣ 출력예제 2
16


풀이

연속으로 CH되는 경우도 있고 C123H123 이런 경우도 있기 때문에 여러가지 경우를 생각해서 각 경우에 따라 분류해서 질량을 구해주었다.

더 깔끔하게 만들 수 있을거같은데 수업 중에 깔짝거리면서 하다보니 좀 더럽다 ㅎ..

void solve()
{
	string str;
	cin >> str;

	int weight = 0;
	int pos = 0, hPos;
	if (str[1] == 'H')
	{
		weight = 12;
		hPos = 1;
	}
	else
	{
		pos = 1;
		while (str[pos] != 'H')
		{
			pos++;
		}
		hPos = pos;
		pos--;
		int cWeight = 0;
		int k = 1;
		while (pos != 0)
		{
			cWeight += (str[pos] - '0') * k;
			k *= 10;
			pos--;
		}

		weight += cWeight * 12;
	}

	if (str[hPos + 1] == NULL)
	{
		weight++;
	}
	else
	{
		int k = 1;
		hPos++;
		int hWeight = 0;
		pos = str.length() - 1;

		while (str[pos] != 'H')
		{
			hWeight += (str[pos] - '0') * k;
			k *= 10;
			pos--;
		}

		weight += hWeight;
	}

	cout << weight;
}

전체 코드

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>

using namespace std;

void solve()
{
	string str;
	cin >> str;

	int weight = 0;
	int pos = 0, hPos;
	if (str[1] == 'H')
	{
		weight = 12;
		hPos = 1;
	}
	else
	{
		pos = 1;
		while (str[pos] != 'H')
		{
			pos++;
		}
		hPos = pos;
		pos--;
		int cWeight = 0;
		int k = 1;
		while (pos != 0)
		{
			cWeight += (str[pos] - '0') * k;
			k *= 10;
			pos--;
		}

		weight += cWeight * 12;
	}

	if (str[hPos + 1] == NULL)
	{
		weight++;
	}
	else
	{
		int k = 1;
		hPos++;
		int hWeight = 0;
		pos = str.length() - 1;

		while (str[pos] != 'H')
		{
			hWeight += (str[pos] - '0') * k;
			k *= 10;
			pos--;
		}

		weight += hWeight;
	}

	cout << weight;
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	//freopen("input.txt", "rt", stdin);

	solve();

	return 0;
}