[백준] 2257번 화학식량

거북이·2023년 7월 31일
0

백준[실버2]

목록 보기
72/81
post-thumbnail

💡문제접근

  • 각 원자의 질량값을 딕셔너리로 선언하고 괄호 문자 내의 원자의 경우 ( 문자가 나오고서부터 )가 나올 때까지의 값을 계산하는 temp 변수를 만들어 구한 다음 stack에 넣어주는 방식으로 코드를 작성했다. 스택과 문자열을 같이 다루는 부분에서 연습이 좀 더 필요하다고 보여진다.

💡코드(메모리 : 31256KB, 시간 : 44ms)

import sys
input = sys.stdin.readline

chemical_string = input().strip()
stack = []
result = 0
# 각 원자의 질량을 딕셔너리로 선언
dic = {"H" : 1, "C" : 12, "O" : 16}
for i in range(len(chemical_string)):
    if chemical_string[i] == "(":
        stack.append("(")
    elif chemical_string[i] == ")":
        temp = 0
        # ( ) 괄호 문자 내의 질량 값을 구하기 위해 무한 반복문을 돌림
        while True:
            val = stack.pop()
            if val == "(":
                break
            temp += val
        stack.append(temp)
    # 만약 10진수의 경우 → 스택에 들어간 마지막 수를 해당 10진수만큼 곱해서 더한다.
    elif chemical_string[i].isdigit():
        stack[-1] *= int(chemical_string[i])
    # 만약 문자인 경우 → 딕셔너리의 key값을 찾아 더해준다.
    else:
        stack.append(dic[chemical_string[i]])
print(sum(stack))

💡소요시간 : 26m

0개의 댓글