군대에서_코딩하기_알고리즘_14

신태원·2021년 8월 15일
0

군대에서_코딩하기

목록 보기
15/30
post-thumbnail

오늘 문제는 별로 어렵지는 않았지만, 그래도 한번에 성공해서 기분이 꽤 좋다 ㅎㅎ
탄화수소의 질량을 계산하는 문제였는데, 예를 들어 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형으로 바꿔줄때도 아스키코드를 이용해 바꿔주었다.
마지막 부분의 코드가 조금 더럽긴 한데, 그래도 비슷한 맥락으로 짠것같으니 만족이다~

profile
일단 배우는거만 정리해보자 차근차근,,

0개의 댓글