백준_2257번

정소담·2023년 2월 19일
0

BOJ Short Review

목록 보기
36/44
post-thumbnail

2257번 화학식량

화학식이 주어지고 화학식의 원소 값을 구하는 문제.
괄호 안의 값을 서로 더하고 숫자를 만나면 수만큼 곱을 해야하는데
숫자의 위치 또는 괄호의 갯수에 따라 값이 달라지기 때문에 제법 까다로웠다.
여러개의 괄호가 주어질 수 있는 문제로 스택을 활용하였다.

num = {'H':1, 'C':12, 'O':16} # 각 원소의 값
lst = [] # 값을 쌓아줄 빈 리스트 생성
for i in input(): # 입력 문자열 순회
    if i == '(': # 열린 괄호는 닫힌 괄호를 만나면 열린 괄호까지의 값을 더해 주기 위해 
        lst.append(i) # 리스트에 쌓아준다.
    elif i ==')': # 닫힌 괄호를 만나면
        cnt = 0
        while 1:
            n = lst.pop() # 쌓여있는 값 뒤부터 
            if n == '(': # 열린 괄호를 만날 때 까지
                break
            else: # 하나씩 지우면서 값을 더해주고
                cnt += n
        lst.append(cnt) # 괄호 안의 값이 모두 더해지면 다시 리스트에 쌓아준다.
    elif i in num: # 만약 원소를 만나면
        lst.append(num[i]) # 원소의 값을 쌓아준다.
    else: # 원소도 아니고 괄호도 아니라면
        lst[-1] *= int(i) # 쌓여있는 값 중 가장 끝에 있는 값을 숫자 i만큼 곱해준다.
print(sum(lst)) # 쌓여있는 값들을 모두 합하여 출력.

자격증 시험이 얼마 남지 않아 컴퓨터 이론 공부 위주로 하다보니
알고리즘 문제를 하루에 한,두문제 정도 밖에 풀지 못했다.
그래도 하루에 한문제 이상 씩 풀기로 다짐 한 건 잘 지켜내고 있으니 뿌듯하다! 점점 해야 할 공부는 늘어나는 것 같은데 크게 힘들진 않고 재미있다.
대신 지치지 않도록 페이스 조절을 잘 해야 할 것 같다.

profile
Hi ! I'm newbie :)

0개의 댓글