[ Code Kata ] ๐Ÿคฏ Python #8 ์ง์ด ๋งž๋Š” ๊ด„ํ˜ธ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ

Haileeยท2020๋…„ 12์›” 9์ผ
0

[ Code Kata ]

๋ชฉ๋ก ๋ณด๊ธฐ
14/28
post-thumbnail

๋ฌธ์ œ

์˜ค๋Š˜์˜ ์ฝ”๋“œ์นดํƒ€! ์—ญ์‹œ ์‰ฝ์ง€ ์•Š๋‹ค.
์‚ฌ๋žŒ๋“ค์ด๋ž‘ ์ด์•ผ๊ธฐ ํ•ด๋ณธ ๊ฒฐ๊ณผ, ์ด์ „์— ๋กœ๋งˆ์ž -> ์ •์ˆ˜ํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์ฒ˜๋Ÿผ
์ผ์ • ์กฐ๊ฑด๋“ค์„ ๋ฏธ๋ฆฌ ๋ฆฌ์ŠคํŠธ๋กœ ์„ ์–ธํ•ด๋‘๊ณ  ํ’€์–ด์•ผ ํ•œ๋‹ค๋Š๋‹ˆ,
๋”•์…”๋„ˆ๋ฆฌ์— ๋ฏธ๋ฆฌ ๊ด„ํ˜ธ๋“ค์„ key, value๋กœ ์„ ์–ธํ•ด๋‘์–ด ์ง์„ ๋งž์ถฐ๋‘” ๋’ค ํ’€์–ด์•ผ ํ•œ๋‹ค๋Š๋‹ˆ..
๋‹ค์–‘ํ•œ ์•„์ด๋””์–ด๊ฐ€ ๋‚˜์™”๋‹ค.

ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ๋งˆ๋‹ค ํ’€์–ด๋‚ธ ์ฝ”๋“œ๋Š” ๋ชจ๋‘ ๋‹ค๋ฅด๋‹ค..! ์งฑ์‹ ๊ธฐํ•ด
ํ•˜๋Š˜์•„๋ž˜ ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋Š” ์—†๋‹ค๊ณ ..

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):
  check_each = {
    '(':')',
    '{':'}',
    '[':']'
  }
  if len(string)%2 == 1:
    return False
  else:
    for i in range(len(string)%2+1):
      if string[i] in check_each.keys():
        if string[-(i+1)] == check_each[string[i]]:
          return True
        else:
          return False
      else:
        return False

์˜ค๋Š˜๋„ ์—ญ์‹œ ๋‚˜์˜ ์‹์€ ๋”๋Ÿฝ๋‹ค

์šฐ์„  dictionary ๋‚ด์— key, value ํ˜•์‹์œผ๋กœ ๊ด„ํ˜ธ๋ฅผ ๊ฐ๊ฐ ์„ ์–ธํ•ด๋‘๊ธฐ๋กœ ํ–ˆ๋‹ค.

์ฃผ์–ด์ง„ ๋งค๊ฐœ๋ณ€์ˆ˜์— len()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ธธ์ด๋ฅผ ๊ตฌํ–ˆ์„ ๋•Œ,
ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ๋Š” ๋ฌด์กฐ๊ฑด False๋กœ ๋ฆฌํ„ดํ•œ๋‹ค.

์ง์ˆ˜์ธ ๊ฒฝ์šฐ๋งŒ ํ•ด๋‹นํ•˜๋„๋ก ์กฐ๊ฑด๋ฌธ์„ ๊ฑธ์–ด์ฃผ๋Š”๋ฐ
์ฒ˜์Œ๊ณผ ๋์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ตํ•˜๋ฉด์„œ dictionary๋‚ด๋ถ€์— ๋“ค์–ด์žˆ๋Š” key, value์ง๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ๋น„๊ต๋ฅผ ํ•ด๋ณธ๋‹ค.

ํ•œ ์Œ ๋‹จ์œ„๋กœ ๊ฒ€์‚ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด์˜จ string ์ „์ฒด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ ๊ฒƒ+1๋งŒํผ์„ ๊ณ„์‚ฐํ•˜๋„๋ก ํ•œ๋‹ค.
(ํ•œ์Œ๋งŒ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ, 2%2 ->1, but i๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—..!)
๋งŒ์•ฝ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ string ๋‚ด ์ฒซ๋ฒˆ์งธ ๊ด„ํ˜ธ๊ฐ€ dictionary๋‚ด key๋กœ ์กด์žฌํ•œ๋‹ค๋ฉด
string์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๊ด„ํ˜ธ๊ฐ€ ํ•ด๋‹น key์˜ value ๊ฐ’์ด๋ผ๋ฉด ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๊ธฐ!
์ด๋Ÿฐ ์‹์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋„๋ก ํ–ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚˜์˜ ๋กœ์ง์—๋Š” ์น˜๋ช…์ ์ธ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค.
(())[] ๐Ÿ‘‰๐Ÿป ์ด ๊ฒฝ์šฐ๋Š” ๋‚ด๊ฐ€ ๋งŒ๋“  ๋กœ์ง ์ค‘ ์–ด๋Š๊ณณ์—์„œ๋„ ๊ฒ€์‚ฌ๋˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ..!!!!!!!

์ด๋ ‡๊ฒŒ ๋„์ค‘์— ๋ฒฝ์„ ๋งŒ๋‚ฌ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋‹ˆ ๋”์ด์ƒ ๋จธ๋ฆฌ๊ฐ€ ๋Œ์•„๊ฐ€์ง€๋ฅผ ์•Š์•˜๋‹ค.
ํ•ด๋‹น ๊ฒฝ์šฐ๋Š” ๋‚ด๊ฐ€ ์ง€๊ธˆ๊นŒ์ง€ ํ•œ ์ƒ๊ฐ์„ ๋ชจ๋‘ ๋’ค์ง‘๊ณ  ๋‹ค์‹œ ํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์•˜๊ธฐ ๋•Œ๋ฌธ..!


๋ชจ๋ธ ์†”๋ฃจ์…˜

def is_valid(string):
  left = ['(', '{', '[']
  right = [')', '}', ']']
  stack = []
  for letter in string:
    if letter in left:
      stack.append(letter)
    elif letter in right:
      if len(stack) <= 0:
        return False
      if left.index(stack.pop()) != right.index(letter):
        return False
  return len(stack) == 0

๊ทธ๋ž˜์„œ ๋ชจ๋ธ ์†”๋ฃจ์…˜์€ ๊ณผ์—ฐ ๋ญ๋ผ๊ณ ํ–ˆ์„๊นŒ?
๋‚˜์˜ if ๋กœ ์ ์ฒ ๋œ ๋กœ์ง๋ณด๋‹ค ํ›จ์”ฌ ๋ˆˆ์— ์ž˜ ๋“ค์–ด์˜จ๋‹ค.

์•„์˜ˆ ์™ผ์ชฝ์— ๋“ค์–ด๊ฐˆ ๊ด„ํ˜ธ๋“ค, ์˜ค๋ฅธ์ชฝ์— ๋“ค์–ด๊ฐˆ ๊ด„ํ˜ธ๋“ค์„ ๋”ฐ๋กœ list๋กœ ์„ ์–ธํ•ด๋‘๊ณ 
string์˜ ๊ฐœ์ˆ˜๋Œ€๋กœ for loop์„ ๋Œ๋ฆฌ๋ฉด์„œ ๋น„๊ตํ•˜๋Š”๋ฐ
๋งŒ์•ฝ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ ๋‚ด์— string์˜ ๊ด„ํ˜ธ๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋ฌด์กฐ๊ฑด stack์ด๋ผ๋Š” ๋นˆ list ๋‚ด์— ์ถ”๊ฐ€ํ•œ๋‹ค.

์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ด„ํ˜ธ๊ฐ€ ์กด์žฌํ•  ๊ฒฝ์šฐ stack์„ ํ™•์ธํ•ด์„œ
stack์ด ๋น„์–ด์žˆ๋‹ค๋ฉด ํ•ด๋‹น ๊ด„ํ˜ธ์™€ ์ง์ด ๋˜๋Š” ์™ผ์ชฝ ๊ด„ํ˜ธ๊ฐ€ ์—†๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ
return False!


ํ•˜๋„ ๊ด„ํ˜ธ ๊ด„ํ˜ธ ํ•˜๋‹ˆ๊นŒ ๊ฒŒ์ŠˆํƒˆํŠธ ๋ถ•๊ดดํ˜„์ƒ ์˜ฌ๊ฑฐ๊ฐ™์•„
๊ด„ํ˜ธ.. ๊ด„ํ˜ธ.. ํ™œ..๊ด„..

profile
์›น ๊ฐœ๋ฐœ ๐Ÿท๐Ÿ˜Ž๐Ÿ‘Š๐Ÿป๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€