변경이력

돌아가기
8 296개 문자 추가 134개 문자 삭제

2016/11/22 21:48

권용훈

**Ruby** nodes.reduce(add(parent, node))로 btree 생성. trav(btree)로 in-order 순회, x 계산, 순회한 node 출력. ```{.ruby} add = ->par,node do par ? node.y = par.y + 1 : (return node) chd = node.val < par.val ? par.l : par.r chd ? add[chd, node] : (node.val < par.val ? par.l = node : par.r = node) par end layout = ->btree_str=gets.chop,cnt=0 do Node = Struct.new(:val, :x, :y, :l, :r) nodes = btree_str.chars.map {|c| Node.new(c, 0, 1)} btree = nodes.reduce(&add) trav = ->node do trav[node.l] if node.l node.x = cnt+=1 puts node.values[0..2].join(" ") trav[node.r] if node.r end Node = Struct.new(:val, :x, :y, :l, :r) nodes = btree_str.chars.map {|c| Node.new(c, 0, 1)} trav[nodes.reduce(&add) trav[btree] end ``` **Test** ```{.ruby} in_ordered = "a 1 4\n" + "c 2 3\n" + "e 3 6\n" + "g 4 5\n" + "h 5 4\n" + "k 6 2\n" + "m 7 3\n" + "n 8 1\n" + "p 9 3\n" + "q 10 5\n" + "s 11 4\n" + "u 12 2\n" expect{ layout["nkcmahgeupsq"] }.to output(in_ordered).to_stdout ``` **Output** ```{.ruby} cmd > layout.call nkcmahgeupsq a 1 4 c 2 3 e 3 6 g 4 5 h 5 4 k 6 2 m 7 3 n 8 1 p 9 3 q 10 5 s 11 4 u 12 2 ```
**Ruby** nodes.reduce(add(parent, node))로 btree 생성. trav(btree)로 in-order 순회, x 계산, 순회한 node 출력. ```{.ruby} add = ->par,node do par ? node.y = par.y + 1 : (return node) chd = node.val < par.val ? par.l : par.r chd ? add[chd, node] : (node.val < par.val ? par.l = node : par.r = node) par end layout = ->btree_str=gets.chop,cnt=0 do Node = Struct.new(:val, :x, :y, :l, :r) nodes = btree_str.chars.map {|c| Node.new(c, 0, 1)} btree = nodes.reduce(&add) trav = ->node do trav[node.l] if node.l node.x = cnt+=1 puts node.values[0..2].join(" ") trav[node.r] if node.r end Node = Struct.new(:val, :x, :y, :l, :r) nodes = btree_str.chars.map {|c| Node.new(c, 0, 1)} trav[nodes.reduce(&add) trav[btree] end ``` **Test** ```{.ruby} in_ordered = "a 1 4\n" + "c 2 3\n" + "e 3 6\n" + "g 4 5\n" + "h 5 4\n" + "k 6 2\n" + "m 7 3\n" + "n 8 1\n" + "p 9 3\n" + "q 10 5\n" + "s 11 4\n" + "u 12 2\n" expect{ layout["nkcmahgeupsq"] }.to output(in_ordered).to_stdout ``` **Output** ```{.ruby} cmd > layout.call nkcmahgeupsq a 1 4 c 2 3 e 3 6 g 4 5 h 5 4 k 6 2 m 7 3 n 8 1 p 9 3 q 10 5 s 11 4 u 12 2 ```
7 150개 문자 추가 169개 문자 삭제

2016/11/21 03:11

권용훈

6 94개 문자 삭제

2016/11/21 00:03

권용훈

5 2개 문자 추가 23개 문자 삭제

2016/11/20 10:39

권용훈

4 67개 문자 삭제

2016/11/20 10:32

권용훈

3 169개 문자 추가 191개 문자 삭제

2016/11/20 10:18

권용훈

2 2개 문자 추가

2016/11/20 01:51

권용훈

1 Original

2016/11/20 01:50

권용훈

코딩도장

코딩도장은 프로그래밍 문제풀이를 통해서 코딩 실력을 수련(Practice)하는 곳입니다.