오늘 문제는 별로 어렵지는 않았지만, 그래도 한번에 성공해서 기분이 꽤 좋다 ㅎㅎ
탄화수소의 질량을 계산하는 문제였는데, 예를 들어 C2H14를 입력받으면 탄소(C) 한개의 질량은 12g이고 수소(H) 한개의 질량은 1g이므로 212 + 141 = 38을 출력하면된다.
그리고 탄소 혹은 수소의 개수가 1개인 경우에는 숫자를 생략한다.
거의 항상 Char 을 써왔기 때문에, 이번에는 String을 좀 써봤다.
우선 Char는 입력할 때 배열의 갯수를 미리 정해야하기 때문에, limit이 확실하지 않은 문제에서는 쓰기에 조금 부담이 있다.(몇십만의 입력이 들어올수도 있기 때문에, 배열의 크기를 그만큼 크게 잡아놓기도 좀 뭐하기 때문)
따라서 한동안 안쓰던 String을 이용했고, stoi이라는 함수를 이용해 (Sting to int) String형 숫자를 int형으로 바로 바꾸는 메소드도 이용해봤다.
#include<iostream>
#include<vector>
#include<cmath>
#include<string>
using namespace std;
int main(){
vector<string> CH;
//벡터 string 형의 CH 선언
string name;
string temp;
getline(cin, name);
//공백포함된 String을 간편하게 받기위해 getline으로 받아줬다.
int size = name.size();
//이런식으로하면 String의 사이즈를 간편하게 알 수 있다.
int C_num = 0, H_num=0;
int C_cnt = 0, H_cnt=0;
int key=0, fin=0;
//cout<<size;
for(int i = 1; i<size; i++){
if(name.at(i)!='H'&&key==0){
C_cnt++;
}
else{
key++;
}
}
H_cnt = size - 2 - C_cnt;
//cout<<C_cnt<<endl;
//cout<<H_cnt<<endl;
if(C_cnt!=0){
for(int i = 1; i<=C_cnt; i++){
temp = name.at(i);
C_num += stoi(temp)*pow(10, C_cnt-i);
}
}
else{
C_num =1;
}
if(H_cnt!=0){
for(int i = C_cnt+2; i<size; i++){
temp = name.at(i);
H_num += stoi(temp)*pow(10, size-1-i);
}
}
else{
H_num = 1;
}
fin = C_num*12 + H_num*1;
cout<<fin;
}
해설영상을 보니, 뭔가 비슷한 메커니즘으로 풀긴했는데, char형식의 배열을 만들었고, int형으로 바꿔줄때도 아스키코드를 이용해 바꿔주었다.
마지막 부분의 코드가 조금 더럽긴 한데, 그래도 비슷한 맥락으로 짠것같으니 만족이다~