문제설명
괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
()() 또는 (())() 는 올바른 괄호입니다.
)()( 또는 (()( 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.제한사항
▪ 문자열 s의 길이 : 100,000 이하의 자연수
▪ 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.입출력 예
s answer "()()" True "(())()" True ")()(" False "(()(" False
def solution(s): s = s.replace("()","") if s.count('(') != s.count(')'): return False elif len(s)== 0 : return True elif s[0] == ')' or s[-1] =='(': return False return True
원래 replace() 대신에 처음 코드는
str = "()" while str in s : // ()를 NULL로 바꿔줌.
이렇게 코드를 짰었다. 그런데 python 컬렉션중에 이러한 코드를 한방에 해결해주는 replace() 함수가 있어서 , 사용하게 되었다.
👀 repalce() 사용
→ replace("찾을값(A)", "바꿀값(B)", [바꿀횟수])
→ A를 B로 바꿔줌.이렇게 바꿔주고 나니까, 처음 받았던 s라는 문자열에서 서로 짝이되는 괄호는 지워지고, 나머지가 남게 된다.
이때, 3가지의 형태로 나뉘게 되는데, 그게 if문의 조건들이다.
첫번째 조건은, 짝이 맞지 않은 경우! 이 경우는 어찌됐든 False이다.
두번째 조건은, 아무것도 남지 않는 경우! 바로 True ~~
세번째 조건은, 문자열 맨앞에 ) 인 경우 혹은 맨 뒤에 ( 인 경우이다. 이때는, 괄호가 짝지어지지 않기 때문에 무조건 False!!!근데, 이렇게 짜고 나서보니까, Queue 나 Stack을 이용해서, pop 하고 push하면서 짰으면, 더 알고리즘적이었을거 같은 느낌적인 느낌이 드는 느낌... ㅜ_ㅜ 다음에 도전해봐야겠당