Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

아무거나 내꺼 공부할래

탄화수소 질량 / c / 제한시간 없음 본문

[c언어&c++] 알고리즘 공부/인프런(Inflearn)

탄화수소 질량 / c / 제한시간 없음

mero95 2021. 1. 22. 13:36

▣ 문제

탄소(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;
}

C100H, CH10 같은 케이스가 성립이 안됨

 

<수정한 코드>

#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가지 케이스로 푸는게 더 효율적임