Computer Science/C++

백준 C++ | #25 BOJ2257 화학식량 C++ 문제 풀이

토마토. 2022. 9. 1. 09:16

2257번: 화학식량 (acmicpc.net)

 

2257번: 화학식량

첫째 줄에 화학식이 주어진다. 화학식은 H, C, O, (, ), 2, 3, 4, 5, 6, 7, 8, 9만으로 이루어진 문자열이며, 그 길이는 100을 넘지 않는다.

www.acmicpc.net

 

골드까지 화이팅! 

 

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <stack>
#include <cstring>


int main() {
	char* str = new char[100];
	scanf("%s", str);
	int size = strlen(str);
	std::stack<int> stk;

	int i = 0;
	while (i < size) {
		if (str[i] == '(') {
			stk.push(-1);
		}
		else if (str[i] == ')') {
			int tmp = 0;
			while (stk.top() != -1) {
				tmp += stk.top();
				stk.pop();
			}
			// 이제 stk.top()==-1
			stk.pop();
			stk.push(tmp);
		}
		else if (str[i] == 'H') {
			stk.push(1);
		}
		else if (str[i] == 'C') {
			stk.push(12);
		}
		else if (str[i] == 'O') {
			stk.push(16);
		}
		else { // 숫자
			int tmp=0;
			tmp = stk.top();
			stk.pop();
			int number = str[i] - '0';
			tmp *= number;
			stk.push(tmp);
		}
		i++;
	}
 
	int answer = 0;
	while (!stk.empty()) {
		answer += stk.top();
		stk.pop();
	}

	std::cout << answer << std::endl;
	return 0;
}