programmers/ 21.02.06 Correct parenthesis

soohee·2021년 2월 7일
0

알고리즘

목록 보기
19/20
post-thumbnail

💜 문제 설명

문제설명

괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어
()() 또는 (())() 는 올바른 괄호입니다.
)()( 또는 (()( 는 올바르지 않은 괄호입니다.
'(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요.

제한사항

▪   문자열 s의 길이 : 100,000 이하의 자연수
▪   문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다.

입출력 예

sanswer
"()()"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하면서 짰으면, 더 알고리즘적이었을거 같은 느낌적인 느낌이 드는 느낌... ㅜ_ㅜ 다음에 도전해봐야겠당

profile
🐻‍❄️

0개의 댓글