백준 4949번 : 균형잡힌 세상

2024. 5. 24. 21:55개인활동/코테

https://www.acmicpc.net/problem/4949

 

이때 주의해야 할 점, 괄호가 없는 문자열 또한 균형이 잘 맞춰져 있는 경우로 판단

 

while True:
    input_str = input()
    if input_str == ".":
        break
    balance = ""
    for i in input_str:
        if i in "()[]":
            balance += i

    for _ in range(len(input_str) // 2 + 1):
        balance = balance.replace("()", "")
        balance = balance.replace("[]", "")

    if balance:
        print("no")
    else :
        print("yes")

 

머리가 너무 안돌아가던 나머지 아래의 블로그를 참고하여 코드를 이해하고 작성하였다.

어떻게 이런 생각을!?!?!

 

그리고 출력 값이 대문자인지 소문자인지 잘 확인하자.

대문자로 했다가 계속 실패가 떠서 엥 엥엥 하다가 한숨을 내쉬었다.

 

 

 

[백준] 4949번 균형잡힌 세상 파이썬

[백준] 4949번 균형잡힌 세상

velog.io

 

아래는 숏코드 분석이다.

import re
while(i:=input())!='.':exec("i=re.sub(r'\(\)|\[\]|[^()\[\]]','',i);"*99);print('yneos'[i>''::2])

 

여기서 주의깊게 살펴볼 부분은 re.sub을 어떻게 활용하였는가로 볼 수 있을 것이다.

일단 while문 안의 코드를 좀 분리해서 확인해보자.

 

### 조건식 : "."이 아니라면 계속해서 반복하도록
while(i:=input())!='.':

exec("
		i = re.sub(r'\(\)|\[\]|[^()\[\]]','',i);" * 99);
        print('yneos'[i>''::2])

 

먼저 조건문 안의 바다코끼리 연산자를 활용해 input 값을 i에게 대입해준다. while문에서 선언한 i를 계속해서 활용할 수 있음!!

 

그리고 re.sub 부분을 확인해보면

\(
\)
|
\[
\]
|
[^()\[\]]

다음과 같이 문자열이 구성되어있음을 확인할 수 있다. 

() 또는 [] 또는 ()와 []가 아닌 문자열을 제거하는 것으로 보인다.

 

그러면 남은 것들이 있을 것이고, 이 남은 것을 기준으로 판단하는 것으로 보인다.

 

re — Regular expression operations

Source code: Lib/re/ This module provides regular expression matching operations similar to those found in Perl. Both patterns and strings to be searched can be Unicode strings ( str) as well as 8-...

docs.python.org

 

 

[python] 정규 표현식과 re.sub()

python에서 문자열을 치환해주는 메소드가 있긴 하지만 정수에 한정되어있기 때문에, 정규 표현식을 이용한 문자열 치환을 할 수 있는 sub에 대해 공부하였다.re.sub에 대해 알아보기에 앞서, 정규

velog.io