CDG 3기/JAVA의정석

스터디 실습 문제 2

이선민이★ 2015. 9. 21. 18:22

1.
class BindingTest{
    public static void main(String[] args) {
 Parent p = new Child();  //참조변수의 타입 Child.
 Child c = new Child();
   //중복된경우 참조변수의 타입에 따라 달라짐.

 System.out.println("p.x = " + p.x);
 p.method();

 System.out.println("c.x = " + c.x);
 c.method();
    }
}

class Parent {
    int x = 100; //조상클래스의 멤버변수

    void method() {
 System.out.println("Parent Method");
}

class Child extends Parent
    int x = 200;

    void method() {
 System.out.println("Child Method");
    }
}

[실행결과]
p.x = 100
Child Method
c.x = 200
Child Method

 

2.
조상타입의 참조변수로 자손타입의 객체 참조
Product p1 = new TV();
Product p2 = new TV();
Product p3 = new TV();

공통의 조상을 가진 서로 다른 종류의 객체를 배열로 묶어서 다룰 수 있음.
Product p[] = new Product[3];
p[0] = new TV();
p[1] = new Computer();
p[2] = new Audio();

배열의 크기를 알아서 관리
Vector item = new Vector();
(item.add(p);)

 

3-1.
피보나치 수열을 재귀함수로 구현한다.
피보나치수열은 fib(0)=0, fib(1)=1 ... fib(n)=fib(n-1)+fib(n-2)

3-2.
재귀함수로 구현하면 시간복잡도가 지수가 된다.
왜냐하면 fib(5)를 구한다고 했을 때 아래와 같이 된다.
fib(5)
fib(4)+fib(3)
fib(3)+fib(2)+fib(2)+fib(1)
...
여기서 fib(2)와 같이 동일한 계산이 반복되기 때문이다.

한번 구한 값을 저장해서 여러번 중복 계산하지 않는 메모이제이션에 대해 알아보고 배열을 사용하여 동적 계획을 이용해서 구현한다.

https://ko.wikipedia.org/wiki/%EB%8F%99%EC%A0%81_%EA%B3%84%ED%9A%8D%EB%B2%95

실습문제2.txt