기록하고 까먹지 말기

4889 본문

전공/백준

4889

yha97 2022. 11. 26. 14:50

날짜 : 2022. 11. 26

사용 언어 : python

 

문제

 

 

코드

import sys

def change(str):
    c = 0
    while len(str) > 0:
        if str[0] == str[1]:  # {{, }}인 경우 단순 하나만 바꾸면 안정적
            c += 1
        else:  ## }{ (서로 다른 부호)인 경우 앞뒤 바꾸어야 안정적
            c += 2
        del str[0] # 맨 앞 두 괄호 삭제(pop은 맨 뒤의 수 삭제)
        del str[0]
    return c

cnt = 0
while True:
    cnt += 1
    s = str(sys.stdin.readline().rstrip())
    if "-" in s: break  # 탈출조건
    stack = list()
    flag = 0
    for i in range(len(s)):
        if s[i] == "{":  # 괄호를 여는 경우
            flag += 1  # 몇 번째 괄호인지 마킹
            stack.append(s[i])
        elif s[i] == "}":  # 괄호를 닫는 경우
            if len(stack) > 0 and stack[-1] == "{":  # 스택 가장 마지막에 여는 괄호를 입력받았다면 
                flag -= 1
                stack.pop()  # 스택의 값 pop
            else:
                stack.append("}")  # 가장 마지막에 입력받은 것이 닫는 괄호인 경우
                flag += 1  # 플래그 증가
    if flag == 0:  # 안전한 문자열
        print("%d. 0"%cnt)
    else:
        print("%d. %d"%(cnt, change(stack)))

 

 

풀이

- 주석 참조

 

 

알게된 점

- 말미에 pop과 del을 혼동하는 바람에 check() 함수에서 pop을 사용해 틀렸다고 출력되었다.

- del과 pop의 차이를 구분하고 혼동하지 않도록 주의해야겠다.

 

 

참고 사이트

 

'전공 > 백준' 카테고리의 다른 글

1158  (0) 2022.11.27
2468  (0) 2022.11.26
2212  (0) 2022.11.26
10799  (0) 2022.11.26
5567  (0) 2022.11.24