티스토리 뷰

반응형


#. Problem

* The copyright in this matter is in Inflearn


#. Resolution Process

  1. Read and understand problem

  2. Redefine the problem + abstract

     - 탄소의 질량 12g

       수소의 질량 1g

  3. Create solution plan (select Algorithm, Data structure)

  4. Prove the plan (check performance time and usage memory)

  5. Carry out the plan

  6. Look back on the plan and find a way to improve it


#. Solve

  1. 단순하게 화합물을 문자열로 받아서 index 1 원소 x 12 + index 2 원소 x 1 를 해주면 된다.

     만일, idnex 1 이 숫자가 아니라면 C1을 의미하므로 1 * 12, H는 index 2 를 체크해준다. 


    C2H4 를 입력받았으면

    2 * 12 + 4 * 1 = 28


    CH4 를 입력받았을 경우,

    1 * 12 + 4 * 1 = 16 


    이제 코드로 옮겨보자!


  2. 이런 바보.. 문제를 좀 제대로 읽자..

     a 와 b 는 (1 <= a,b <= 100) 인 것을..


     전략을 바꿔보자.

     우선 C는 무조건 index 0에 있으므로 index 1 을 확인해서 숫자가 아닐 경우 C1 인 것이고, (ex. CH4)

     다음 인덱스의 요소가 숫자가 아닐 때까지 읽는다. 

     여기서 다음 요소가 숫자일 경우 (ex. C98H4) 읽은 9에 10 을 곱해주고 그 다음 요소를 더해준다. 

     이렇게 C의 개수와 H의 개수를 구해준 후

     마지막에 C * 12 + H 를 해주면 되겠다.

  

  3. 짜다보니 복잡해져서 그냥 단순하게 for문을 나눠서 C의 개수와 H의 개수를 구해줬다..     


#. Code

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
32
#include <cstdio>
#include <vector>
#include <algorithm>
 
using namespace std;
 
char a[8];
 
int main(void)
{
    freopen("input.txt""rt", stdin);
 
    int i, c = 0, h = 0;
 
    scanf("%s"&a);
 
    for (i = 1; a[i] != 'H'; i++)
        c = c * 10 + (a[i]-48);
    
    if (!c)
        c = 1;
    
    for (i = i+1; a[i] != '\0'; i++)
        h = h * 10 + (a[i]-48);
 
    if (!h)
        h = 1;
 
    printf("%d\n", c * 12 + h);
 
    return 0;
}
cs


#. Other code

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
#include<stdio.h>
 
int main(){
    char a[10];
    int c=0, h=0, i, pos;
 
    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\n", c*12+h);    
 
    return 0;
}
cs

나는 그냥 먼저 돌리고 해당 화합물의 개수가 없을 시 1로 설정해주었는데,

강사님은 먼저 개수가 있는지 없는지 먼저 확인 후 처리를 해주셨다.


먼저 선확인 후 처리해주는게 더 안전한 코드인것 같다.

그래도 내 코드에서 어차피 해당 index에 숫자가 없다면 for문도 돌지 않을 것이므로

사실상 두 코드의 성능은 그렇게 큰 차이는 없어보인다.


#. Result

  - Input --------------------------------------------------------

C2H4

CH4

------------------------------------------------------------------


  - Output --------------------------------------------------------

28

16

------------------------------------------------------------------



반응형
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday