it 취업을 위한 알고리즘 문제풀이 입문 : 31. 탄화수소 질량
탄화수소 질량
탄소(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;
}