728x90
1. 문제
https://codeup.kr/problem.php?id=2013
[출처 : 코드업(https://codeup.kr/)]
이번 문제는 문자열로 주어진 화학식을 slice를 통해 각 분자로 구분한뒤 총 분자량을 구하는 문제입니다.
2. 해답
#include <stdio.h>
#include <stdbool.h>
float check(char arr[5]) {
float tmp, sum = 0.0;
int n = 0, p;
// 문자열에서 원자를 구분
if (arr[0] == 'H') {
if (arr[1] == 'e') { tmp = 4; p = 2; }
else { tmp = 1; p = 1; }
}
else if (arr[0] == 'B') {
tmp = 10.8;
p = 1;
}
else if (arr[0] == 'C') {
if (arr[1] == 'l') { tmp = 35.5; p = 2; }
else { tmp = 12; p = 1; }
}
else if (arr[0] == 'N') {
if (arr[1] == 'e') { tmp = 20.2;p = 2; }
else if (arr[1] == 'a') { tmp = 23;p = 2; }
else { tmp = 14;p = 1; }
}
else if (arr[0] == 'O') {
tmp = 16;
p = 1;
}
else if (arr[0] == 'F') {
tmp = 19;
p = 1;
}
else if (arr[0] == 'P') {
tmp = 31;
p = 1;
}
else if (arr[0] == 'S') {
tmp = 32;
p = 1;
}
else if (arr[0] == 'K') {
tmp = 39.1;
p = 1;
}
if (p == strlen(arr)) return tmp; // 원자 개수가 1개이면 원자량을 리턴
for (int i = p;i < strlen(arr);i++) {
n = (n * 10) + ((int)arr[i] - 48); // 원자 개수 구하기
}
return tmp * n;
}
int main() {
char Arr[15], tmp[5];
bool se = false;
int p = 0;
float sum = 0.0;
scanf("%s", Arr);
for (int i = 0;i < strlen(Arr);i++) {
if ((int)Arr[i] >= 65 && (int)Arr[i] <= 90 && i > 0) {
// 숫자가 아니면 지금까지 저장했던 문자열을 check함수에 입력
tmp[p] = NULL;
sum += check(tmp);
p = 0;
tmp[0] = NULL;
}
tmp[p++] = Arr[i];
}
tmp[p] = NULL;
sum += check(tmp);
if ((int)sum == sum) printf("%d", (int)sum);
else printf("%.1f", sum);
return 0;
}
'프로그래밍 > CodeUp' 카테고리의 다른 글
CodeUp[Q_2017] : 진법 변환 (0) | 2020.02.19 |
---|---|
CodeUp[Q_2016] : 천단위 구분기호 (0) | 2020.02.18 |
CodeUp[Q_2012] : 1의 개수는? 2 (0) | 2020.02.10 |
CodeUp[Q_2011] : 369 게임 2 (0) | 2020.02.10 |
CodeUp[Q_2010] : 루트 문제(?) (0) | 2020.02.09 |