Guest User

Untitled

a guest
Feb 25th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. """
  2. 올바른 괄호란 (())나 ()와 같이 올바르게 모두 닫힌 괄호를 의미한다. )(나 ())() 와 같은 괄호는 올바르지 않은 괄호가 된다. 괄호를 이리저리 움직이며 올바른 괄호를 찾던 A씨는 N개의 괄호쌍이 있을 때, 올바른 괄호를 만들 수 있는 경우의 수가 궁금해졌다.
  3. 괄호 쌍의 개수 N개가 주어졌을 때, 경우의 수를 반환하는 코드를 작성해라. 예를 들어 N = 1일 경우는 () 의 1가지만 존재하므로 1을 리턴하면 된다.3일 경우에는((())), (())(), ()(()), ()()(), (()()) 의 5가지가 존재하므로 5를 리턴하면 된다.
  4.  
  5. N = 1 : () -> 1
  6. N = 2 : ()(), (()) -> 2
  7. N = 3 : ()()(), (())(), ()(()), (()()), ((())) -> 5
  8. """
  9.  
  10. class node:
  11. left_node = None
  12. right_node = None
  13.  
  14.  
  15.  
  16. def move_left(self):
  17. self = self.left_node
  18. def move_right(self):
  19. self = self.right_node
  20.  
  21. # left node check
  22. def is_left_node(p_node):
  23. if p_node.left_node is None:
  24. return False
  25. else : return True
  26.  
  27. # right node check
  28. def is_right_node(p_node):
  29. if p_node.right_node is None:
  30. return False
  31. else : return True
  32.  
  33. def recursive(p_node):
  34. if not is_left_node(p_node) :
  35. if N > left :
  36. left = left + 1
  37. recursive(node())
  38.  
  39. else :
  40. if not is_right_node(p_node) :
  41. if left > right :
  42. right = right + 1
  43. recursive(node())
  44. else :
  45. return
  46. else :
  47. right = right + 1
  48. p_node = p_node.right_node
  49. recursive(p_node)
  50. else:
  51. left = left + 1
  52. pnode = p_node.left_node
  53. recursive(p_node)
  54.  
  55. # 가장 깊은 레벨의 경우의 수만 count !
  56. def travel(p_node) :
  57. # depth가 가장 높은 노드만 찾는다는 것? 다른 관점에서 생각..
  58. # => 자식 노드가 없는 노드.. left, right 노드가 없는 노드
  59. if not is_left_node(p_node) :
  60. if not is_right_node(p_node) :
  61. total_count = 1 + total_count
  62. else :
  63. p_node = p_node.right_node
  64. travel(p_node)
  65. else :
  66. p_node = p_node.left_node
  67. travel(p_node)
  68.  
  69. total_count = 0
  70.  
  71. N = 3
  72. left = 0
  73. right = 0
  74.  
  75. # header생성
  76. header_node = node()
  77. left = left + 1
  78.  
  79. recursive(header_node)
  80. travel(header_node)
  81.  
  82. print('입력 N 에 대한 경우의 수 : ')
  83. print(total_count)
Add Comment
Please, Sign In to add comment