2016. 6. 26. 17:06



이번에 트리 구조의 계층형 노드를 구현 하였다.


개발언어는 java 1.8 이다.  1.8 이하의 버전에서는 Main 클래스에 있는 stream만 제거 해주면 된다.


설명 하는 능력이 없으므로, 코드만 공개.. -_-;


  • 계층 노드 클래스
자식(child), 형제(sibling) 으로 표현 하였다.
자식 및 형제 노드는 무족건 부모 노드에서만 생성 할 수 있도록 하였다.
자식은 부모를 알 수가 없다.
부모 노드에서 자식노드들을 호출 할 수 있다.(getChildren() 메서드 호출)
public class HierarchyNode {
    private final int data;
    private HierarchyNode child;
    private HierarchyNode sibling;

    public HierarchyNode(int data) {
        this(data, null, null);
    }

    private HierarchyNode(int data, HierarchyNode child, HierarchyNode sibling) {
        this.data = data;
        this.child = child;
        this.sibling = sibling;
    }

    public HierarchyNode appendToChild(int data) {
        if (child == null) {
            child = new HierarchyNode(data);
            return child;
        }
        return child.appendToSibling(data);
    }

    private HierarchyNode appendToSibling(int data) {
        if (sibling == null) {
            sibling = new HierarchyNode(data);
            return sibling;
        }
        return sibling.appendToSibling(data);
    }


    public int getData() {
        return data;
    }

    public HierarchyNode getChild() {
        return child;
    }

    public HierarchyNode getSibling() {
        return sibling;
    }

    public List<HierarchyNode> getChildren() {
        List<HierarchyNode> children = new ArrayList<>();
        if (child == null)
            return Collections.EMPTY_LIST;

        HierarchyNode tempChild = child;
        while (tempChild != null) {
            children.add(tempChild);
            tempChild = tempChild.getSibling();
        }
        return children;
    }

    public HierarchyNode findChild(int data) {
        Optional<HierarchyNode> first = getChildren().stream().filter(n -> data == n.getData()).findFirst();
        if (!first.isPresent())
            return null;
        return first.get();
    }
}

  • 테스트 코드
 public class HierarchyNodeTest {


    private HierarchyNode node;

    @Before
    public void setUp() throws Exception {
        node = new HierarchyNode(1);
        node.appendToChild(2);
        node.appendToChild(3);
        node.appendToChild(4);
    }

    @Test
    public void test_children() throws Exception {
        printChildren(node);

        int expectedData = 2;
        for (HierarchyNode each : node.getChildren()) {
            assertThat(each.getData(), is(expectedData++));
        }

    }

    private void printChildren(HierarchyNode node) {
        List<HierarchyNode> children = node.getChildren();
        System.out.println(node.getData());
        children.stream().map(n-> n.getData()).forEach(n -> System.out.println(String.format("ㄴ %d", n)));
    }

    @Test
    public void test_appendToChild() throws Exception {
        node.appendToChild(5);

        int expectedData = 2;
        HierarchyNode siblingOfChild = node.getChild();
        while(siblingOfChild != null) {
            assertThat(siblingOfChild.getData(), is(expectedData++));
            siblingOfChild = siblingOfChild.getSibling();
        }
    }


}

  • 실행 클래스
 public class HierarchyNodeMain {

    public static void main(String... arg) {

        HierarchyNode node = new HierarchyNode(1);
        HierarchyNode node2Of1 = node.appendToChild(2);
        node.appendToChild(3);
        node.appendToChild(4);

        node2Of1.appendToChild(5);
        node2Of1.appendToChild(6);
        HierarchyNode node7Of2 = node2Of1.appendToChild(7);
        node7Of2.appendToChild(10);
        node7Of2.appendToChild(11);
        node7Of2.appendToChild(12);

        HierarchyNode newNode = node;
        while ( newNode != null ) {
            printChildren(newNode);

            Scanner sc = new Scanner(System.in);
            System.out.println("다음 노드 선택 해주세요.(종료:q) : ");
            String input = sc.nextLine();
            if ("q".equals(input)) {
                newNode = null;
            } else {
                newNode = newNode.findChild(Integer.parseInt(input));
            }

            if (newNode == null) {
                System.out.println("종료되었습니다.");
            }
        }

    }

    private static void printChildren(HierarchyNode node) {
        List<HierarchyNode> children = node.getChildren();
        System.out.println(node.getData());
        children.stream().map(n-> n.getData()).forEach(n -> System.out.println(String.format("ㄴ %d", n)));
    }
}

  • 실행결과




Posted by dragonSilver
2016. 1. 13. 23:09

식사


아침

소고기 및 야채샐러드



점심

김밥


저녁

비빔밥


운동

가슴

벤치프레스

20kg - 30회

40kg - 15회

40kg - 15회

40kg - 15회

40kg - 13회

40kg - 14회


벤트 오버 덤밸 로우

각 10kg - 20회

각 15kg - 15회

각 15kg - 15회

각  15kg -15회

각 12.5Kg - 15회

각 10kg - 20회

long pull

70kg - 20회

80kg - 15회

90kg - 20회

100kg - 10회

90kg - 15회

80kg - 15회


푸셥

15회

15회

10회

Posted by dragonSilver
2014. 5. 23. 01:10

벌써 5월 말이다.. 시간은 참 빨리 간다.

1월초에 회사 둥지를 옮겼는데..

얼마 안된 것 같은데..

벌써 5월말.. 조금 있으면 6월..

참... 시간 빨리간다.


요즘 스프링 캠프 2014 발표 준비를 하느라..

나름 바쁘게 하루 하루를 살고 있다.

발표를 준비하면서 느끼는 건데..


어떠한 것을 발표를해야 내 발표를 듣는 사람들에게 의미 있는 시간이 될지에 대해서 생각해본다.

잘 알지도 못하는 것을 그냥 책보고 또는 레퍼런스 문서를 보면서 사람들에게 알려줘야하는가?


아니면 내가 개발자 삶을 살아오면서 몸소 느꼈던걸 알려줘야하는 것인가?(경험!)

(알려준다고 하면 어떤걸? 어떻게?)


사실, 생각할 필요도 없이 후자의 것으로 발표를 하는게 좋다.

하지만, 준비가 안되어져 있으면 후자의 것으로 발표를 할 수 있을까?


준비가 안되어져 있는데,,, 제대로된 발표가 될까? 하는게.. 나의 생각이다.


그럼, 그 준비라는 것은 무엇인가?

당연히.. 항상 공부를 해야하며..


as-is to-be를 잘 분석해서 모든 것을 기록에 남겨야 한다.

그래서야 변경해도 무엇을 변경했는지..

한눈에 알 수 있지...

나중에 봐도 바로바로 생각 나고..


아직은 많이 부족하지만..

1년뒤 2년뒤 ........ 30년 뒤에도 항상 배우면서 열심히 살아가는 개발자가 되고싶다.


갑자기 급 마무리 하넹 ~ ㅎ




'끄적끄적' 카테고리의 다른 글

드디어 블로그 시작!  (3) 2012.12.13
Posted by dragonSilver