아무거나 내꺼 공부할래
탄화수소 질량 / c / 제한시간 없음 본문
▣ 문제
탄소(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 |
<내 코드>
#pragma warning(disable:4996)
#include <stdio.h>
int main() {
char str[10];
int cn = 0, hn = 0;//Carbon number , Helium number
int res;
int stop = 0;
scanf("%s", str);
if (str[1] == 'H') {
cn = 1;
for (int i = 1; str[i] != '\0'; i++) {
hn = 10 * hn + (str[i] - 48);
}
}
else {
for (int i = 1; str[i] != 'H'; i++) {
cn = 10 * cn + (str[i] - 48);
stop = i;
}
for (int i = stop+2; str[i] != '\0'; i++) {
hn = 10 * hn + (str[i] - 48);
}
}
res = 12 * cn + hn;
printf("%d\n", res);
return 0;
}
<수정한 코드>
#pragma warning(disable:4996)
#include <stdio.h>
int main() {
char str[10];
int cn = 0, hn = 0;//Carbon number , Helium number
int res;
int stop = 0;
scanf("%s", str);
if (str[1] == 'H') {
cn = 1;
stop = 0;
}
else {
for (int i = 1; str[i] != 'H'; i++) {
cn = 10 * cn + (str[i] - 48);
stop = i;
}
}
if (str[stop + 2] == '\0')
hn = 1;
else {
for (int i = stop + 2; str[i] != '\0'; i++) {
hn = 10 * hn + (str[i] - 48);
}
}
res = 12 * cn + hn;
printf("%d\n", res);
return 0;
}
stop 이라는 변수를 활용해서 배열의 특정 부분을 저장해서 푼다.
처음 if문과 else문을 통해서 탄소의 숫자를 저장하고 뒤에 if문과 else문을 통해서 수소의 숫자를 저장한다.
.
내가 코드 짤때는 케이스를 너무 단순하게 탄소의 숫자가 1일때와 1이 아닐때로 두고 풀려다 보니까
반례를 고칠수 없는 코드로 만들어버림 차라리 수정한 코드처럼 각각 4가지 케이스로 푸는게 더 효율적임
'[c언어&c++] 알고리즘 공부 > 인프런(Inflearn)' 카테고리의 다른 글
Special Sort(Google 인터뷰) / c / 제한시간 없음 (0) | 2021.01.22 |
---|---|
3등의 성적은? / c / 제한시간 없음 (0) | 2021.01.22 |
3의 개수는?(Google 인터뷰) / c / 제한시간 없음 (0) | 2021.01.20 |
N!에서 0의 개수 / c / 제한시간 없음 (0) | 2021.01.20 |
Jolly Jumpers / c / 제한시간 없음 (0) | 2021.01.18 |