16개의 댓글이 있습니다.
-
-
Taeyoon_Lee -
다행히 double로 계산해도 AC받을 수 있었어요.
18년 전 link
-
-
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
다행히 double로 계산해도 AC받을 수 있었어요.
정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
Toivoa
A번 답게 가장 쉬운 문제입니다. 문제를 간단히 정리하면 분자식이 주어졌을 때 이 분자의 총 질량을 구하는 것입니다.
분자식에 괄호같은 것도 없고, 원소도 C, H, O, N 뿐인 간단한 입력들만 들어오기 때문에 간단히 입력된 문자열을 파싱해서 답을 구하면 됩니다.
이 정도의 파싱은 간단히 처리하셨을테지만 저는 C의 char*을 이용해서 다음과 같은 식으로 파싱했습니다.
~~~ cpp
int solve(char *s)
{
int mass = 0;
int ret = 0;
while (*s != 0)
{
if (*s >= 48 && *s <= 57) // 48과 57은 각각 '0'과 '9' 입니다.
{
ret += mass * atoi(s); // 숫자를 만나면 숫자 * 질량을 더한다.
while (*s >= 48 && *s <= 57) s++; // 숫자 부분을 건너뛴다.
mass = 0; // 질량을 0으로
continue;
}
ret += mass; // 원소 기호가 연속적으로 나오는 경우를 위해 질량을 더한다.
if (*s == 'C') mass = 12010; // 해당 원소 기호에 따라 질량을 넣어준다
if (*s == 'H') mass = 1008;
if (*s == 'O') mass = 16000;
if (*s == 'N') mass = 14010;
s++;
}
ret += mass; // 원소기호로 끝나는 경우를 위해 마지막으로 질량을 더한다
return ret;
}
~~~
* 컴퓨터 상에서 실수 표현의 한계 때문에 오차가 생길 수 있으니 가능하다면 정수로 계산하는 것이 좋습니다.
18년 전