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
'개인활동 > 코테' 카테고리의 다른 글
[프로그래머스] 자연수 뒤집어 배열로 만들기 (0) | 2024.05.26 |
---|---|
[프로그래머스] 자릿수 더하기 (0) | 2024.05.25 |
백준 9012번 : 괄호 (0) | 2024.05.23 |
[프로그래머스] 약수의 합 (0) | 2024.05.20 |
[프로그래머스] 문자열을 정수로 바꾸기 (0) | 2024.05.19 |