Today's topic
👉 Python 문제 풀이
Python 문제 중 접근하기 어려운 문제에 대해 회고하기 위함으로 포스팅함
문제
s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다.
한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.
예를 들어 아래와 같습니다.
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
1st 접근법
- while & replace() 사용
def is_valid(string):
s = string
while len(s)>0:
s=s.replace('()','').replace('[]', '').replace('{}', '')
if len(s)==0 or len(s) == len(string) :
break
return True if len(s) == 0 else False
2nd 접근법
- 리스트 내의 단어 길이를 for 문을 통해 비교
def is_valid(string):
bracket = {"(": ")", "{": "}", "[": "]"}
for k,v in bracket.items():
if string.count(k) != string.count(v):
return False
res = []
for i in string:
if i in bracket:
res.append(i)
elif len(res) == 0 or bracket[res.pop()] != i:
return False
if len(res) == 0:
return True
s = "{(())[]}()"
print(is_valid(s))
My opinion
- while 문에 아직 익숙하지 못한 것 같다. 또한 replace(), dictionary 사용에도 익숙하지 못하다. 지속적으로 익히기 위해 노력해야겠다!