[CodeKata]Day8

박민하·2022년 6월 16일
0

python 문제

목록 보기
23/49
post-thumbnail

Code Kata 란, 2인 1조의 구성으로 서로 협력하여 하루에 한 문제씩 해결하는 과제입니다.


# 문제

s는 여러 괄호들로 이루어진 String 인자입니다. s가 유효한 표현인지 아닌지 true/false로 반환해주세요.

종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다. 아래의 경우 유효합니다.

한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다. 괄호 순서가 맞아야 한다.

예를 들어 아래와 같습니다.

s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true

# 코드

1. while True

def is_valid(string):
    # 여기에 코드를 작성해주세요.
    while True:
        if "()" in string:
            string = string.replace("()","")
        if "[]" in string:
            string = string.replace("[]","")
        if "{}" in string:
            string = string.replace("{}","")

        if "()" not in string and "[]" not in string and "{}" not in string:
            break

    if string == "":
        return True
    else:
        return False

2. 1번 코드에서 break 조건을 수정해서 while 조건문으로 이동

def is_valid(string):
    # 여기에 코드를 작성해주세요.
    while "()" in string or "[]" in string or "{}" in string:
        if "()" in string:
            string = string.replace("()","")
        if "[]" in string:
            string = string.replace("[]","")
        if "{}" in string:
            string = string.replace("{}","")

    if string == "":
        return True
    else:
        return False

풀이 과정

  1. (), [], [] 가 있으면 삭제, replace() 함수 사용
  2. 만약 (), [], [] 가 더이상 없으면 return
  • 빈 값이 나오면 true
  • 값이 남아있으면 false
  1. (), [], [] 를 삭제 한 후에도 남아있는 경우가 있으므로 while문 사용
  • while True -> 코드1
  • while 코드1에 있는 if 조건문 -> 코드2

+ 그 외 코드

def is_valid(string):
    a = {')':'(',']':'[','}':'{'}
    b = []
    for i in string:
        if i in a:  #i가 ) , ] , } 중 하나일때
            if  b[-1:]==[a[i]]:  #리스트 b 역정렬순으로 비교하여 닫는 괄호를 만나면
                b.pop() #리스트 b에서 빼기
            else:       #못 만나면
               return False 
              
        else: 
          b.append(i) #i가 ( , [ , { 중 하나일때 b에 append
    if b==[]:  # 모든 괄호가 짝꿍을 만나서 전부 pop되어 리스트 b가 빈 배열일 경우
        return True
    return False # 짝꿍을 못 만나서 남아있으면 False
def is_valid(string):
    # 여기에 코드를 작성해주세요.
  open_bracket  = ["(", "{", "["]  
  close_bracket = [")", "}", "]"]
  result = []
  
  for s in string :
    if s in open_bracket :
      result.append(s)
    elif s in close_bracket :
      if result == [] :
        return False
      if open_bracket.index(result.pop()) != close_bracket.index(s) :
        return False
  return len(result) == 0 
profile
backend developer 🐌

0개의 댓글