조준장 개발자 생존기

[baekjoon] 백준 2257번(파이썬): 화학식량 본문

CodingTest/Baekjoon

[baekjoon] 백준 2257번(파이썬): 화학식량

JunJangE 2022. 5. 17. 01:15

문제

 

2257번: 화학식량

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

www.acmicpc.net

알고리즘

- 반복문을 통해 문자를 확인한다.

- 문자가 "("라면 stack에 추가한다.

- 문자가 ")"라면 while문과 .pop()을 통해 stack의 괄호 안에 있는 수를 모두 더하여 stack에 추가한다.

- 문자가 원자라면 stack 수를 추가한다.

- 문자가 괄호도 아니고 원자도 아니라면 숫자이므로 stack에 마지막 숫자를 입력받은 숫자로 곱한다.

- 위 4가지 조건을 통해 반복하여 stack에 값을 추가해준 뒤 stack을 모두 더하여 출력한다. 

코드

import sys


word = list(map(str, sys.stdin.readline().strip()))
temp = {"H": 1, "C": 12, "O": 16}
stack = []

# 반복문을 통해 문자를 확인
for i in word:

    if i == "(":
        stack.append(i)

    elif i == ")":
        check = 0

        # 반복문을 통해 괄호 안에 있는 수를 더하여 stack에 추가
        while True:
            target = stack.pop()

            if target == "(":
                break

            check += target

        stack.append(check)

    # 문자가 원자라면 stack에 원자량을 추가
    elif i in temp:
        stack.append(temp[i])

    # 입력받은 문자가 괄호도 아니고 원자도 아니면 숫자이므로
    # stack에 마지막 숫자를 입력받은 문자로 곱해준다.
    else:
        stack[-1] *= int(i)

print(sum(stack))

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com