문제
탄소(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
코드
최종 풀이
#include <stdio.h>
#include <vector>
using namespace std;
int main() {
int i, c = 0, h = 0, pos;
char a[10];
scanf("%s", &a);
if(a[1] == 'H') {
c = 1;
pos = 1;
} else {
for(i = 1; a[i] != 'H'; i++) {
c = c * 10 + (a[i] - 48);
}
pos = i;
}
if(a[pos + 1] == '\0') {
h = 1;
} else {
for(i = pos + 1; a[i] != '\0'; i++) {
h = h * 10 + (a[i] - 48);
}
}
printf("%d", (c * 12) + (h * 1));
return 0;
}
설명
사용자로부터 탄화수소식을 입력받아 a배열에 할당한다.
만약 a[1]이 'H'일 경우 c=1을 할당하고 해당 index를 저장하기 위해 pos에 1을 할당한다.
'H'가 아닐 경우 a[1]부터 'H'가 아닐 때까지의 c를 구하기 위해 각 자리수의 10을 곱해나간다. 이후 'H'로 도달했을 경우 해당 index를 pos에 할당한다.
해당 pos는 'H'를 위치하고 있으며 만약 그 다음 index에 '\0'을 가지고 있으면 h는 1을 의미하므로 h=1을 할당한다.
만약 '\0'이 아니면 'H'의 다음 숫자(pos+1)로 부터 '\0'이 아닐 때까지의 h를 구하기 위해 각 자리수의 10을 곱해나간다.
이후 c*12, h*1을하여 더한 값을 출력하여 마무리한다.
배운 점
1. 배열을 순회할 때 마지막 index에 해당하는 조건문에 대한 이해가 부족하여 시간소요가 컸다.
2. 문자열을 탐색할 때 한 for문에서 해결하기보다는 끊어서 조건문에 해당하도록 코드를 작성하고 다음 index를 순회하기위해 변수에 할당해나가면 보다 쉽게 해결할 수 있다.
해당 내용은 김태원님의 'it 취업을 위한 알고리즘 문제풀이' 강의를 듣고 작성한 글입니다.