TIL 13. Code Kata

Drageon Lee·2021년 10월 28일
0

TIL_QnA

목록 보기
2/6

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)) # True

My opinion

  • while 문에 아직 익숙하지 못한 것 같다. 또한 replace(), dictionary 사용에도 익숙하지 못하다. 지속적으로 익히기 위해 노력해야겠다!
profile
운동하는 개발자

0개의 댓글

관련 채용 정보