본문 바로가기

23년 1학기 학교공부

충남대학교 8기 글로벌 SW/AI 지필고사

목차

    728x90
    반응형
    SMALL

    1. 아래 코드의 출력 결과를 작성하시오.

    // Java
    class A { public void foo() { System.out.println("Class A"); } }
    class B extends A { public void foo() { System.out.println("Class B"); } }
    
    class Main {
    public static void main(String[] args) {
    	A obj = new B();
    	obj.foo();
    	}
    }
    // C++
    class A { public : void foo() { std::cout << "Class A" << std::endl; } }
    
    class B : public A { public : void foo() { std::cout << "Class B" << std::endl; } }
    
    int main(){
        A* obj = new B();
        obj->foo();
     	delete obj;
        return 0;
    }

    Java : Class B / C++ : Class A

     

    2. 위 문제의 두 출력값이 다른 이유를 JAVA와 C++의 차이점을 이용하여 서술하고, 두 출력값이 같아지도록 C++ 코드의 class A를 수정하시오.

     

    Java의 메서드는 기본적으로 virtual이지만, C++에서는 virtual 키워드를 명시적으로 사용해야한다.

    A* obj = new B()를 통해 불러진 foo()함수 결과가 A의 foo()가 호출되는 것을 볼 수 있는데, 그 이유는 컴파일러가 포인터의 타입을 보고 타입에 맞는 메서드를 찾아주기 때문이다.

    그러나 A의 foo 메서드 앞에 virtual 키워드를 붙인다면, B의 foo()가 호출된다.

    => 상속 후 오버라이드 된 객체에 대해 사용해야 할 때 virtual 키워드를 사용한다.

    Java는 선언된 타입에 상관 없이 생성된 객체의 함수를 바로 호출한다.

     

    참고 : https://marobiana.tistory.com/84

     

    C++ 의 virtual 함수. 가상화. JAVA랑 C++의 차이점

    가상화에 대해서 검색해보다가 사소하게 생각하며 지나친 부분에대해 새로이 알게됐다.C++에 있는 virtual 키워드의 용도, 그리고 JAVA와의 차이점을 알게 되었다. 1. C++에서의 상속 class Parent { public

    marobiana.tistory.com

     

    3. 노드가 v, 간선이 e인 그래프 g를 인접행렬, 인접리스트에 저장했다고 할때 DFS를 실행하면 시간복잡도는?

     

    인접 행렬과 인접 리스트는 각각 다음과 같이 DFS를 수행할 때 시간 복잡도가 달라진다.

    • 인접 행렬: 인접 행렬은 각 노드마다 모든 다른 노드들과의 연결 여부를 저장하기 때문에, 한 노드에서 다른 모든 노드들을 방문하기 위해서는 모든 열을 뒤져야 합니다. 따라서 DFS 수행 시간은 O(V^2) 입니다.
    • 인접 리스트: 인접 리스트는 각 노드마다 해당 노드와 직접적으로 연결된 노드들의 리스트를 저장하기 때문에, 한 노드에서 방문 가능한 다른 노드들을 찾기 위해선 해당 노드와 연결된 모든 노드들을 방문하면 됩니다. 따라서 DFS 수행 시간은 O(V+E) 입니다.

    DFS가 총 N번 호출되긴 하지만 인접행렬과 달리 인접 리스트로 구현하게 되면 DFS하나당 각 정점에 연결되어 있는 간선의 개수만큼 탐색을 하게 되므로 예측이 불가능 하다. 하지만 DFS가 다 끝난 후를 생각하면, 모든 정점을 한번씩 다 방문하고, 모든 간선을 한번씩 모두 검사했다고 할 수 있으므로 O(n+e)의 시간이 걸렸다고 할 수 있다.

    따라서 시간복잡도는 O(n+e)이다.

     

    참고 : https://currygamedev.tistory.com/10#%F-%-F%--%A-%--%EA%B-%-A%EC%-D%B-%--%EC%-A%B-%EC%--%A-%--%ED%--%--%EC%--%---DFS%---%--Depth-First%--Search-

     

    4. [1,-1,0,0] [1,0,-1,0] [1,0,0,-1] [0,1,0,-1] [0,1,-1,0] [0,0,1,-1] 최대 독립벡터의 개수와 그 이유를 설명하시오.

     

    3개.

     

    5. 다음 내용을 영어 3문장으로 요약하시오.

    https://spectrum.ieee.org/how-chatgpt-could-revolutionize-academia

    728x90
    반응형
    LIST