CK week2 day3

BnDCΒ·2021λ…„ 9μ›” 29일
0

code Kata

λͺ©λ‘ 보기
8/22

🧨 문제

sλŠ” μ—¬λŸ¬ κ΄„ν˜Έλ“€λ‘œ 이루어진 string μΈμžλ‹€.
sκ°€ μœ νš¨ν•œ ν‘œν˜„μΈμ§€ μ•„λ‹Œμ§€ True/False둜 λ°˜ν™˜ν•˜λΌ

μ’…λ₯˜λŠ” ' ( ', ' ) ', ' [ ', ' ] ', ' { ', ' } ' 으둜
총 6개 μžˆλ‹€.

ν•œ 번 κ΄„ν˜Έλ₯Ό μ‹œμž‘ν–ˆμœΌλ©΄, 같은 κ΄„ν˜Έλ‘œ 끝내야 ν•œλ‹€.
κ΄„ν˜Έ μˆœμ„œκ°€ λ§žμ•„μ•Ό ν•œλ‹€.


🧡 μ˜ˆμ‹œ)

s = '()' return True
s = '()[]{}' return True
s = '(]' return False
s = '([)]' return False
s='{()}' return True






🎯 λ‚΄ 풀이

def is_valid(string):
#step1
    symbols = {
    	'(' : -1, ')' : 1, 
    	'{' : -2, '}' : 2, 
        '[' : -3, ']' : 3
    }
    x=[]
  
#step2
    for i in range(len(string)):
      x.append(string[i])
      
#step3
      if len(symbols) >= 2 and symbols[x[-2]]<0 and symbols[x[-2]] + symbols[x[-1]] == 0:
        x.pop()
        x.pop()

    return len(x) == 0

stringμ—μ„œ 받은 문자λ₯Ό 배열에 μ €μž₯ν•œλ‹€.
각각의 κ΄„ν˜Έμ— 숫자λ₯Ό λŒ€μ‘ μ‹œμΌœ κ΄„ν˜Έ 쌍이 μ„œλ‘œ 맞으면,
κ·Έ μŒμ„ λ°°μ—΄μ—μ„œ μ œκ±°ν•˜λŠ” 연산을 λ°˜λ³΅ν•΄μ„œ

λ§Œμ•½, x에 남은 μ›μ†Œκ°€ μ—†μœΌλ©΄ True λ‹€ μ œκ±°λ˜μ§€ μ•ŠμœΌλ©΄, Falseλ₯Ό λ°˜ν™˜ ν•˜λ‹€.



πŸ“ step 1

def is_valid(string):
#step1
    symbols = {
    	'(' : -1, ')' : 1, 
    	'{' : -2, '}' : 2, 
        '[' : -3, ']' : 3
    }
    x=[]

symbolsλΌλŠ” dictionaryλ₯Ό 톡해 κ΄„ν˜Έμ— 숫자λ₯Ό λŒ€μ‘ μ‹œν‚¨λ‹€. string을 ν•œ κΈ€μžμ”© 담을 x 리슀트λ₯Ό 생성 ν•œλ‹€.



πŸ“ step2

def is_valid(string):
    #... ...#
    
#step2
    for i in range(len(string)):
      x.append(string[i])
      
      if len(symbols) >= 2 and symbols[x[-2]] < 0 and symbols[x[-2]] + symbols[x[-1]] == 0:
        x.pop()
        x.pop()

    return len(x) == 0

x에 string ν•œ κΈ€μžμ”© λ‹΄μ•„, x의 λ§ˆμ§€λ§‰ 두 μ›μ†Œκ°€ 두 κ΄„ν˜Έ 쌍으둜 λŒ€μ‘ν•˜λ©΄ λ¦¬μŠ€νŠΈμ—μ„œ 제거 ν•œλ‹€.

λ¦¬μŠ€νŠΈμ— 남아 μžˆλŠ” 것이 μ—†μœΌλ©΄, True
λ¦¬μŠ€νŠΈμ— 남아 μžˆλŠ” 것이 있으면, Falseλ₯Ό
λ°˜ν™˜ν•œλ‹€.

profile
β€œLife is C (Choice) between B (Birth) and D (Death).” - 인생은 B와 Dμ‚¬μ΄μ˜ C

0개의 λŒ“κΈ€