인트로
문제 자체는 심플하지만 결과를 도출하기 위해 여러 조건을 검사해야 하는 문제를 소개하려 한다.
탄화수소 질량 구하기
문제
탄소(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;
}
'Algorithm > it 취업을 위한 알고리즘 문제 풀이' 카테고리의 다른 글
[Algorithm] 35. Special Sort(구글 인터뷰) (0) | 2021.08.19 |
---|---|
[Algorithm] 33. 3등의 성적은? (0) | 2021.08.18 |
[Algorithm] 29. 3의 개수는?(small) (0) | 2021.08.12 |
[Algorithm] 28. N!에서 0의 개수 (0) | 2021.08.11 |
[Algorithm] 27. N!의 표현법 (0) | 2021.08.10 |