2. 아래 예외 처리 코드에 문제가 있는지/없는지 밝히고, 문제가 있다면 200자 이내로 설명하시오try{}catch(Exception ex){}catch(ArithmeticException ex) {}해당 예외처리 코드에는 문제가 있다. 그 이유는 다음과 같다.예외 처리 시 catch 구문으로 예외처리를 하는데, 이때 catch 구문의 순서가 문제가 된다.첫번째 catch 구문의 Exception 클래스는 포괄적인 Exception 클래스로 특정한 예외만을 처리하는 것이 아닌 모든 예외를 처리한다. 따라서 예외 발생시 첫번째 catch 구문에서 모든 예외를 처리하게 되고, 두번째 catch 구문의 ArithmeticException 구문은 실행될 수가 없다. 해당 코드를 컴파일 할 경우 자바 컴파일러가 해당 구문이 잘못되었음을 알려주며 컴파일을 하지 않는다. 위의 구문을 정상적으로 처리하고자 한다면, 첫번째와 두번째 catch 구문의 순서를 서로 바꿔주어야 할 것이다.3. 자바 API 문서에서 Comparable<T> 인터페이스를 찾아보고, 해당 인터페이스를 구현하는 클래스를 정의할 때 어떤 메소드를 구현해야 하는지 쓰시오.Comparable<T> 인터페이스는 java.lang 패키지의 하위 인터페이스이다.
2020 학년도 ( 1 )학기 과제물(온라인제출용)교과목명 : 데이터베이스시스템학 번 :성 명 :연 락 처 :_________________________________________________________________________o 과제유형 : ( 기말) 형o 과 제 명 : 데이터베이스시스템1.힙 파일 구조, 순차 파일 구조와 해시 파일 구조의 차이점을 비교 설명힙 파일 구조란 저장순서의 고려 없이 파일 내에 임의의 위치에 배치하는 방법이다. 파일 안에 레코드를 위한 공간만 있으면 임의의 레코드는 어디에 놓일 수 있으며, 레코드들이 삽입되는 순서대로 파일에 저장되는 파일이다. 즉, 저장순서의 고려 없이 파일에 삽입되는 파일 구조이다.순차 파일 구조란 레코드들의 물리적 순서가 입력된 레코드들의 논리적 순서와 동일하게 순차적으로 저장하는 방법을 말한다. 즉, 레코드가 검색키 순서대로 정렬이 되며, 레코드가 파일에 삽입되는 시점에서 키 값이 부여된다. 따라서 검색키에 대한 정렬연산이 불필요하며, 주로 키 값들의 순서로 레코드를 판독하는 연산에 효율적이다. 하지만 파일에 새로운 레코드를 삽입/삭제하는 경우 파일 전체를 복사해야 하기 때문에 많은 비용이 소요된다. 순차 파일의 종류로는 레코드가 시스템에 삽입되는 순서대로 만들어지는 파일인 엔트리 순차 파일과 레코드들의 키 값의 순서대로 만들어지는 파일인 키 순차 파일이 있다.해싱 파일 구조란 해싱함수를 기반으로 하는 파일 구조 방법이다. 이 파일에서는 레코드를 식별하기 위한 키 값과 저장 장치에 저장되어 있는 레코드 주소 사이에 대응 관계가 성립되어 있어야 한다. 해시 함 수를 이용하여 레코드의 해시 필드값에 적용하여 레코드를 저장하고 있는 디스크 블록의 주소를 산출하여 접근하다. 레코드에 대해 한 번의 블록 접근으로 원하는 레코드를 검색할 수 있다.세 가지의 파일 구조에 있어서, 레코드를 접근하는 순서가 중요하지 않고, 탐색보다 삽입하는 성능이 중요할 때에는 힙 파일 구조를 선택하는 것이 좋다. 반면 레코드를 순차적으로 일괄 처리 하는 방향에서 사용하기 제일 좋은 방법은 순차 파일 구조 이다. 다만 레코드들이 자주 삭제되거나, 검색이 빈번할 경우 순차파일 구조의 이점을 살리지 못하므로 선택하지 않는 것이 맞다. 해시 파일 구조는 보안이 중요한 상황에서 사용하기 좋지만, 최적화를 위해선 여러 요소를 고려해야 하는 것을 명심해야 한다.2. B+ 트리 애니메이션을 참조하여 B+트리의 구조와 탐색 키 검색, 삽입 삭제의 과정을 1500자 이내로 설명하시오.B+ 트리는 루트 노드로부터 모든 단말 노드에 이르는 경로의 길이가 같은 높이 균형 트리이다. 상용 DBMS에서도 널리 사용되는 대표적인 순서 인덱스로서, 순서 인덱스는 파일이 커질수록 데이터 탐색에 있어서 접근 비용이 커지는 문제점을 해결하기 위해 제안되었다.이 트리는 인덱스 세트와 순차 세트로 구성되어 있다. 인덱스 세트는 루트 노드와 중간 노드로 구성되어 있으며, 단말 노드에 있는 탐색키 값을 신속하게 찾아갈 수 있도록 경로를 제공하는 목적으로 사용된다. [n/2] ~n 개 사이의 사이의 개수를 자식으로 소유한다. 순차세트는 단말 노드로 구성되어 있으며, 모든 노드가 순차적으로 서로 연결되어 있다. 순차세트의 단말 노드는 적어도 (n-1)/2 개의 탐색키를 포함하며, 탐색키에 대한 실제 레코드를 지칭하는 포인터를 제공한다.B+ 트리에서 탐색 키 검색의 과정은 상대적으로 간단하다. 항상 루트부터 시작해서 단말 노드에 도달할 때까지 비교 연산을 통해 이루어진다. 이렇게 단말 노드들을 거쳐 말단 노드에 도착하게 되면 탐색이 종료된다.B+ 트리에서 레코드의 삽입, 삭제 시 B+ 트리에 대한 수정을 동반한다. 먼저 삽입의 경우 비어있는 노드에 레코드를 삽입하는 것은 큰 문제가 되지 않는다. 하지만 노드에서 유지해야 할 탐색키와 포인터 수 증가로 인해 노드를 분할해야 하는 경우가 발생하는데, 이때 노드의 분할이 일어나면 중간 키 값이 부모 노드로 올라갈 뿐 아니라 새로 분열된 노드에도 포함된다. 새 노드는 단말 노드끼리의 링크드 리스트에 삽입된다.레코드의 삭제 시 재배치와 합병이 필요하지 않을 때에는 단말 노드에서만 삭제가 된다. 이때 Index는 다른 키값을 탐색하는데 사용될 수 있기 때문에, 노드의 값이 삭제되어도 삭제하지 않는다. 재배치할 경우 인덱스 부분 노드의 키 값은 변하지만 트리 구조 자체는 변하지 않는다. 반면 합병의 경우 인덱스 부분에서도 키 값을 삭제하게 된다.이렇게 레코드의 삽입, 삭제 시 트리 자체에 대한 수정이 동반되며, 노드가 분할되거나 병합되면서 높이의 균형이 맞는 않는 경우도 발생할 수 있다. Hyperlink "https://middleware.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B5%AC%EC%A1%B0-%EB%B0%8F-%ED%8C%8C%EC%9D%BC-%EA%B5%AC%EC%A1%B0" https://middleware.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B5%AC%EC%A1%B0-%EB%B0%8F-%ED%8C%8C%EC%9D%BC-%EA%B5%AC%EC%A1%B0 Hyperlink "http://blog.naver.com/PostView.nhn?blogId=sunbeatz&logNo=140107450007&parentCategoryNo=&categoryNo=14&viewDate=&isShowPopularPosts=true&from=search" http://blog.naver.com/PostView.nhn?blogId=sunbeatz&logNo=140107450007&parentCategoryNo=&categoryNo=14&viewDate=&isShowPopularPosts=true&from=search Hyperlink "https://m.blog.naver.com/PostView.nhn?blogId=k97b1114&logNo=140152581976&proxyReferer=https:%2F%2Fwww.google.com%2F" https://m.blog.naver.com/PostView.nhn?blogId=k97b1114&logNo=140152581976&proxyReferer=https:%2F%2Fwww.google.com%2F Hyperlink "http://www.jidum.com/jidums/view.do?jidumId=156" http://www.jidum.com/jidums/view.do?jidumId=156
2020 학년도 ( 1 )학기 과제물(온라인제출용)교과목명 : 모바일 앱 프로그래밍학 번 :성 명 :연 락 처 :_________________________________________________________________________o 과제유형 : ( 기말 ) 형o 과 제 명 : 모바일 앱 프로그래밍AlertDialog 객체와 Builder 객체의 관계Dialog 란 전체 화면을 다 채우지 않은 일부 화면만 가리는 윈도우를 의미한다. 사용자에게 간단한 입력을 받거나 정보를 알리는 용도로 사용된다. 사용자가 응답하기 전까지 화면에 사라지지 않고 대기한다.AlertDialog는 위의 Dialog를 상속받은 자식클래스로서 제목 하나와 최대 3개의 버튼, 선택가능한 품목 목록 또는 사용자 지정 레이아웃을 표시 할 수 있는 대화상자이다.(AlertDiloag 객체의 상속 표시)Builder 객체는 어떤 객체를 생성할 때에 빌더객체를 이용하여 생성자의 객체를 생성할 수 있도록 하는 객체이다. 흔히 빌더패턴 이라는 디자인패턴으로 불리기도 한다. 필수인자를 포함한 빌더 객체를 생성한 뒤에 선택인자들을 빌더 객체에 추가하여 빌더 객체를 통하여 생성자의 객체를 생성하는 패턴을 따르게 된다.아래의 코드를 보면 좀더 쉽게 AlertDialog와 Builder 객체간의 관계에 대해 알 수 있다.AlertDialog 객체를 빌더 객체를 이용하여 생성하며, 간단한 몇줄의 코드 만으로도 손쉽게 AlertDialog 를 생성 할 수 있다.다만 이러한 빌더 객체를 이용한 AlertDialog 의 생성에는 단점이 있는데, 본인이 원하는 특정한 디자인으로 만들기 어렵다는 것이다. Dialog 안에 여러가지 요소들을 자유롭게 넣고 싶을 때, 즉 확장성이 없다는 단점이 있다.액티비티 호출과 Intent 객체의 관계안드로이드에서 액티비티란 화면에 표시되는 UI 구성을 위하여 가장 기본이 되는 요소이다. 즉 안드로이드 앱은 최소 하나 이상의 액티비티를 가져야 한다는 것을 의미한다. 한 개의 개의 액티비티를 가지고 있는 앱에서 액티비티 간의 화면을 전환할 때 현재 액티비티에서 어떠한 액티비티를 실행 할 때 startActivity() 함수를 호출하여 다른 액티비티를 실행하게 된다. 이처럼 다른 액티비티를 실행 할 때 현재 액티비티에서 다른 액티비티를 실행하는 의도(Intent)가 필요하게 된다. 즉 액티비티들 사이에서 데이터를 주고 받기 위한 용도로 쓰인다.Intent를 통하여 주고 받는 데이터는 숫자, 문자 등 형식에 크게 구애받지 않는다. Intent에 저장되는 값은 KEY-VALUE 값으로 저장되어 데이터를 받을 액티비티에서 해당 KEY 값으로 Intent에서 데이터를 추출하여 사용할 수 있다.아래는 intent를 통해 데이터 전달이 이루어지는 과정을 표현 한 것이다.(출처 : Hyperlink "https://recipes4dev.tistory.com/75" https://recipes4dev.tistory.com/75)AdapterView와 Adapter 객체의 관계객체의 관계를 알아보는데 앞서 각각의 정의에 대해 알아 보면 다음과 같다.먼저 Adapter 란 하나의 객체로서, 보여지는 View와 그 View에 올릴 데이터들을 연결하는 일종의 연결고리이다. 데이터의 원본을 받아 관리하고, 어댑터뷰가 출력할 수 있는 형태로 데이터를 제공하는 중간 객체 역할을 하는 것이다. 즉, 제공받은 원본을 가공하여 여러 어댑터뷰와 연결하는 기능을 제공해주며 이는 제공받은 원본을 화면에 어떻게 보여줄지 정하는 기능을 한다고 할 수 있다. 이때 어댑터와 연결된 원본의 데이터가 변경이 되면 notifyDataSetChanged 메소드를 호출하여 원본이 변경되었다고 어댑터뷰에 알려주어 화면이 다시 그려지도록 해야 한다. 이 말은 어댑터뷰를 변경하고 싶다면 원본을 변경하여 화면을 다시 그려야 한다는 의미이다.Adapter뷰는 위의 Adapter 라는 중간 객체를 이용하는 객체이다. 많은 정보들을 화면에 보여 줄 필요가 있을 때, View에 직접 정보를 주입하지 데이터가 어떤 형태인지, 어떤 데이터를 가지고 있는지에 대해서는 상관하지 않고 있다. 즉, Adapter가 주는 View만 목록으로 나열하게끔 되어 있으며, 실제 데이터를 어떻게 표현하면 될지에 대해 관심을 가지고 있지 않다. 즉 Adapter에서 원하는대로 데이터만 출력하는 기능을 하게 된다.이에 대해서 데이터 - Adapter – AdapterView의 관계를 표시하면 다음과 같다.(출처 : Hyperlink "https://codedragon.tistory.com/4790" https://codedragon.tistory.com/4790)콜백 메소드를 통한 이벤트 처리, 리스너 인터페이스를 통한 이벤트 처리, 액티비티를 통한 리스너의 구현, View를 통한 리스너의 구현의 차이에 대해 논하라.먼저 콜백의 사전적 의미는 답신 전화, 회신, 회수 등의 뜻이 있다. 그렇다면 프로그래밍 즉 안드로이드에서 콜백 메소드는 다른 함수에 인수로 전달되는 함수로, 함수에서 특정 이벤트가 끝난 후에 시스템에 의해 실행될 것으로 예상되는 함수이다. 이 콜백 메소드는 주로 비동기 작업을 할 때 유용하게 사용된다. 콜백 메소드는 재정의를 통해 활용을 하게 되는데, 사용자와 상호 작용하는 주체가 View 이므로 이벤트에 대한 콜백의 정의는 주로 View가 재정의 하여 제공한다. 즉 사용자가 화면을 터치하거나 떼는 등의 이벤트가 발생하면 콜백 메소드가 호출된다.위의 코드처럼 View 로부터 MyView 를 파생시켜 onTouchEvent 를 재정의 하여 이벤트를 처리하도록 한 것이다.이때 MainActivity 를 MyView를 ContentView로 등록하여 onTouchEvent를 재정의 하였다.이처럼 콜백 메소드를 이용하여 이벤트를 처리 할 수 있다. 다만 콜백 메소드를 재정의 하기 위해서는 몇가지 단점이 있는데, 반드시 슈퍼 클래스를 상속받아야 하며, 위젯의 경우 이벤트를 처리하기 위해 각각의 위젯뷰를 만들어야 하는 번거로움이 있다. 또한 모든 이벤트에 대한 콜백 메소드가부에 관심을 갖고 있는 객체라고 할 수 있다. 리스너 인터페이스는 콜백메소드를 통한 이벤트 처리 방식의 단점을 보완하기 위하여 등장하였다.리스너는 특정 이벤트를 처리하는 인터페이스로 이벤트 발생을 처리하는데, 대응되는 이벤트를 받는 하나의 메소드가 선언되어 있으며 모두 View의 내부 인터페이스로 선언되어 있다. 이처럼 대응되는 이벤트를 받도록 추상메소드가 선언되어 있으므로, 이벤트를 처리하려면 리스너 인터페이스가 리스너의 추상 메소드인 이벤트 핸들러를 구현하여야 한다. 그리고 이벤트가 발생했을 때 구현한 핸들러가 호출되도록 View에 리스너 인터페이스를 연결해야 한다. 즉 어떤 리스너 인터페이스가 어떤 이벤트를 처리한다는 것을 등록해야 한다. 리스너 인터페이스의 등록 메소드로는 setOnTouchListenr , setOnClickListener 등이 있다.위의 코드처럼 리스너 인터페이스를 구현하는 클래스를 선언하고 추상 메소드를 구현, 리스너 인터페이스인 ClickListener 를 선언 및 생선한 뒤 준비된 리스너 인터페이스를 View 와 연결하는 작업을 통해 이벤트를 처리한다.콜백 메소드와 리스너 인터페이스를 통한 이벤트 처리는 이벤트 처리 결과가 같은 결과가 나오더라도 이처럼 처리하는 내부 로직에 있어서는 차이점이 존재한다. 가장 큰 차이점으로는 리스너 인터페이스는 여러 View에 의해 공유될 수 있어서 어떤 객체에서 발생한 이벤트인지를 View 인수로 전달받는다. 반면에 콜백 메소드는 특정 클래스에 소속되어 있어서 이벤트를 받는 객체가 고정되어 있다. 즉, 리스너 인터페이스는 임의의 View에 대한 이벤트를 처리할 수 있어서 조금 더 유연하게 처리 할 수 있다는 장점이 있다.다만 리스너 인터페이스를 통한 이벤트 처리에도 한계가 있는데, 구현을 위하여 별도의 클래스를 하나 더 선언해야 하며, 모든 이벤트에 대해 대응하기 위하여 크랠스를 만든다면 소스 관리의 어려움 등이 수반되는 단점이 있다.액티비티를 통한 리스너의 구현은 선언문에서 리스너 인터페이스를현하게 된다.위의 코드처럼 액티비티가 인터페이스를 자체적으로 구현하므로 별도의 클래스를 선언할 필요가 없으며, 액티비티 객체가 이미 존재하므로 리스너 인터페이스를 생성할 필요도 없다.이러한 액티비티를 통한 리스너의 구현에는 몇가지 한계가 있는데, 리스너 인터페이스가 구현된 View는 액티비티에 강하게 종속되며, 이 때문에 다른 액티비티에 재사용 하려면 액티비티가 구현하는 리스너를 분리하여 다른 액티비티로 옮겨야 한다. View와 관련된 메소드가 View 자신에게 포함되어 있지 않고 부모가 구현을 해주기 때문에 독립성이 떨어지게 된다.이처럼 액티비티를 통한 리스너의 구현에서 몇가지 단점이 발생하게 되고, 그렇다면 액티비티가 아닌 View에서 리스너를 구현하는 것을 통해 보완하였다.onTouch 이벤트를 예로 들자면, 액티비티에서 이벤트를 처리하는 것이 아니라, 이벤트 처리를 위해 필요한 onTouch 메소드를 이벤트가 발생한 View에서 스스로 처리하도록 하는 것이다. 이벤트를 처리하는 메소드를 내부에 포함하기 때문에 구조상 깔끔하고 View의 재사용에도 유리하다. 이는 액티비티의 부담을 줄어들게 하고 코드의 가독성이 향상되는 장점이 있다.액티비티를 통한 리스너의 구현과 View를 통한 리스너의 구현의 가장 큰 차이는 액티비티와 View 중 어느 부분에서 리스너를 구현하고, 부담을 지게 하는지에 따른 차이이다. 이 차이에 따라서 코드의 가독성이나 독립성이 차이나게 되고, 구조가 차이나는 것이다. Hyperlink "https://developer.android.com/reference/android/content/Intent.html" https://developer.android.com/reference/android/content/Intent.html Hyperlink "https://developer.android.com/reference/android/app/AlertDialog" https://developer.android.com/reference/a/10
2020학년도 1학기 기말시험(온라인평가) 제출용교과목명 : 알고리즘학 번성 명 :연 락 처평가유형 :(과제물형, 주관식형, 혼합형 중 해당 유형 표기)---------------------------------------------------------------------------o 주관식형 : ※ 주관식일 경우 문제번호 표기 후 답안 작성o 과제물유형 : ( 공통 )형 ※평가유형이 과제물일 경우 해당 유형 작성(예:공통, A/B/C/D/E 형)o 과제명 :『알고리즘』 교과목의 2018학년도~2019학년도 기출문제(출석수업대체시험 및 기말시험 총4종의 100문제)를 다음 조건이 만족되도록 정리해서 제출하시오.[조건]① 각 문제는 교재 목차의 장과 절에 따라 분류해서 정리한다. 단, 문제의 내용/보기가 여러 장/절에 걸쳐 있는 경우에는 정답이 속한 장/절에서 정리한다. 각 문제의 원래 번호는 생략하는 대신에 모든 문제는 순서에 따라 1부터 100까지 차례대로 번호를 부여한다. 또한 각 문제의 뒷 부분에는 출제년도와 시험 종류(대체,기말)를 표시한다. 각 문제에 대한 적절한 해설과 풀이 과정을 반드시 제공해야 한다. 즉, 다른 학생이 해설과 풀이 과정을 통해서 해당 문제를 이해하고 해결할 수 있을 정도로 관련 내용을 상세하면서도 명확하고 깔끔하게 정리해야 한다.(문제의 보기 내용을 단순히 풀어쓰는 형태의 설명은 인정하지 않는다.)② 해당 문제와 관련된 내용을 참조할 수 있도록 교재의 쪽수 또는 강의 자료의 페이지 번호를 반드시 언급해야 한다.③ 모든 문제는 워드프로세서를 이용하여 직접 입력한다. 단, 그림의 경우에는 기출문제의 그림을 캡쳐해서 사용할 수 있다.④ 각 문제당 위의 조건을 반드시 충족해야 하며, 과제 작성 시 지시사항과 과목 질의응답 게시판의 기타 지시사항을 반드시 만족해야 한다.제 1장 알고리즘 소개1. 다음 중 교재 및 강의에서 다루어지지 않은 부류의 알고리즘은?(2018기말)(차례 참조)① 기하 알고리즘② 정렬 알고리즘③ 유전 알고리즘④ 욕)(1장 25-28p)SumAverage( A[], n ) {sum = 0;i = 0;while ( i < n ) {sum = sum + A[i];i = i + 1;}average = sum / n;print sum, average;}① O(logn) ② O(n2)③ O(nlogn) ④ O(n)정답 : 4번해설 : T(n)을 입력 크기, 알고리즘의 각 문장이 수행되는 횟수를 계산하고 이것을 모두 더하면 T(n) = 3n+5 가 된다. 따라서 입력크기 n에 의해 결정되는 함수로 표현된다.18. 입력 크기 에 대한 알고리즘 수행시간 을 점근 성능으로 올바르게 나타낸 것은?(2019기말)(1장 26p)① ②③ ④정답 : 4번해설 : 점근성능은 수행 시간의 다항식 함수에서 최고차항만을 계수 없이 취해서 단순화시킨 형태이다.19. 점근 성능의 표기법 중에서 최악의 수행시간만을 나타낼 때 적합한 것은?(2019대체)(1장 27p)① O (“big-oh”)② Ω (“big-omega”)③ Θ (“big-theta”)④ Φ (“big-phi”)정답 : 1번해설 : O 표기로 나타낸 알고리즘의 성능은 입력크기 n이 증가함에 따라 알고리즘의 최악의 수행시간은 g(n) 에 비례해서 증가함을 의미한다.20. 다음 O-표기 중에서 가장 효율적인 성능을 나타내는 것은?(2018기말)(1장 28p)① O(logn) ② O(nlogn)③ O(n2) ④ O(2n)정답 : 1번해설 : O 표기 간의 연산 시간이 증가하는 순서는 다음과 같다.O(1) < O(log n) < O(n) < O(n log n) < O(n^2) < O(n^3) < O(2^n)21. 단위 연산의 수행시간이 ( 초)인 컴퓨터에서 개의 데이터를 처리하는 데 가장 오랜 시간이 걸리는 알고리즘의 성능을 나타내는 점화식은?(2019기말)(1장 31p)① ,② ,③ ,④ ,정답 : 4번해설 : 각 점화식을 폐쇄형으로 나타낼 경우1 – n log n2 – n3 – n4 – n^2 가 되어 4번이 정답이 된다.2장 분할정복 알고리즘2렬의 합병 함수 Merge()② 주어진 데이터에 대한 최솟값 찾기③ 정렬된 데이터에 대한 이진 탐색④ 퀵 정렬의 분할 함수 Partition()정답 : 3번해설 : 각 분할정복 방법에서, 정렬된 데이터에 대한 이진 탐색의 시간복잡도는 O(log n)으로 가장 효율적이다.3장 동적 프로그래밍 알고리즘38. 동적 프로그래밍 방법에 대한 설명으로 적당하지 못한 것은?(2019기말)(3장 69p)①모든 정점 간의 최단 경로 문제와 스트링 편집 거리 문제에 적용된다.② 상향식 접근 방법이다.③ 최적성의 원리가 만족되는 문제에만 적용할 수 있다.④ 소문제들은 서로 독립적이다.정답 : 4번해설 : 동적 프로그래밍 방법에서는 한 번 사용한 소문제의 해가 다음에 또 사용될 수 있으므로 이 해를 테이블에 저장해 두고 필요할 때마다 바로 사용한다.39. 다음 중 동적 프로그래밍 방법을 적용한 알고리즘은?(2018기말)(3장 69p)① 모든 정점 간의 최단 경로 구하는 알고리즘② 합병 정렬③ 최솟값과 최댓값을 모두 찾는 알고리즘④ 작업 선택 문제정답 : 1번해설 : 동적 프로그래밍 방법은 주로 최적화 문제에 사용된다. 최적성의 원리가 성립하는 최적화 문제가 동적 프로그래밍 방법의 대상이 된다.40. 피보나치 수열 에서 은 얼마인가? (단, , 이다.)(2019기말)(3장 70-71p)① 8 ② 11③ 13 ④ 21정답 : 3번해설 : f(n) 은 소문제의 해인 f(n-1)과 f(n-2)의 합으로 구성된다. 따라서 f(6)은 3+5 로 8이며, f(7)은 8+5가 되어 13이다.41. 동적 프로그래밍 방법을 적용하여 n개의 행렬에 대한 연쇄적 곱셈 문제를 해결하는 알고리즘의 시간 복잡도는?(2019기말)(3장 80p)① ②③ ④정답 : 4번해설 : 연쇄적 곱셉 문제의 알고리즘은 루프가 세 개 중첩된 형태를 갖는다. 따라서 단위 연산의 총 횟수를 계산하여 시간복잡도를 계산하면 O(n^3)이다.42. 차원이 각각 3×2, 2×4, 4×1인 세 개의 행렬 M1, M2, M3을 연쇄적으로 장 트리를 구하는 알고리즘으로만 나열된 것은?(2019기말)(4장 115-121p)① 크루스칼 알고리즘, 플로이드 알고리즘② 프림 알고리즘, 크루스칼 알고리즘③ 데이크스트라 알고리즘, 프림 알고리즘④ 플로이드 알고리즘, 데이크스트라 알고리즘정답 : 2번해설 : 욕심쟁이 방법을 적용하여 최소 신장트리를 구하는 알고리즘은 크루스칼 알고리즘과 프림 알고리즘이 있으며, 두 알고리즘은 욕심쟁이 방법의 개념과 일치하는 일반적인 형태를 가진다.58. 다음 중 최소 신장 트리를 구하는 알고리즘은?(2018기말)(4장 116p)① 크루스칼 알고리즘② 플로이드 알고리즘③ 데이크스트라 알고리즘④ KMP 알고리즘정답 : 1번해설 : 욕심쟁이 방법을 적용하여 최소 신장트리를 구하는 알고리즘은 크루스칼 알고리즘과 프림 알고리즘이 있다.59. 주어진 그래프에 대한 최소 신장 트리의 가중치의 합은?(2019기말)(4장 115-123p)① 15 ② 16③ 17 ④ 18정답 : 2번해설 : 가중치가 가장 작은 간선부터 하나씩 사이클을 만들지 않는 간선을 추가시켜 최소 신장 트리를 만드는 크루스칼 알고리즘을 이용하면, 16의 가중치가 나온다.60. 다음과 같은 처리 방법이 적용되는 알고리즘은?(2018대체)(4장 124p)미선택 정점 집합에서 거리가 가장 작은 정점 u를 선택한 후, u의 인접 정점에 대해서 u를 경유하는 거리와 기존 거리 중에서 작은 것을 새로운 값으로 조정한다.① 크루스칼 알고리즘 ② 플로이드 알고리즘③ 데이크스트라 알고리즘 ④ 프림 알고리즘정답 : 3번해설 : 두 정점간의 최단경로를 구하는 대표적인 알고리즘으로 특정한 하나의 정점을 출발점으로 지정하여 다른 모든 정점으로의 최단 경로를 구하는 알고리즘이다.61. 다음 중 욕심쟁이 방법으로 해결 가능한 문제는?(2019대체)(4장 124p)① 음의 가중치를 갖는 간선이 없는 데이크스트라 알고리즘② 오름차순으로 정렬하는 퀵 정렬 알고리즘③ 추의 무게와 물체의 무게가 모두 정수인 저울 문제④가중치의 합이 음수인 사이클이 존재하지말)(5장 176p)① 평균의 경우 , 최악의 경우 의 성능을 갖는다.②데이터에 대한 정렬 전의 상대적인 순서가 정렬 후에도 그대로 유지된다.③입력 데이터를 저장하는 공간 이외에 상수 개를 초과하는 추가적인 저장 공간이 필요하다.④ 분할정복 방법이 적용되었다.정답 : 4번해설 : 합병 정렬과 퀵 정렬은 분할정복 방법이 적용된 알고리즘이다.81. 주어진 데이터를 오름차순으로 힙 정렬하기 위해 초기 힙을 구성하였다. 이때 루트 노드에 존재하는 데이터는?(2019기말)(5장181-183p)10 7 15 88 50 30 40① 7 ② 15③ 40 ④ 88정답 : 4번해설 : 힙은 완전 이진트리로서, 각 노드의 값은 자신의 자식 노드의 값보다 크거나 같다는 조건을 만족한다. 따라서 최댓값은 항상 루트 노드에 위치한다.82. 다음은 초기 힙을 배열로 표현한 것이다. 이 배열에 대해 오름차순으로 정렬하는 힙 정렬의 두 번째 단계를 한 번 수행한 후의 배열의 상태를 올바르게 표현한 것은?(2018기말)(5장 181-183p)80 60 70 40 20 30 50 10① 60 70 50 40 30 20 10 80② 70 60 50 40 20 30 10 80③ 70 60 50 40 30 20 10 80④ 60 70 40 20 30 50 10 90정답 : 2번해설 :83. 주어진 원소 중에서 자신보다 작거나 같은 값을 갖는 원소의 개수를 계산하여 정렬할 위치를 찾아 정렬하는 방법에 대한 설명으로 적절한 것은?(2018기말)(5장 200p)① 선형 시간의 성능을 갖는다.② 안정적이지 않은 정렬 알고리즘이다.③ 제자리 정렬 알고리즘이다.④ 비교 기반의 알고리즘이다.정답 : 1번해설 : 계수 정렬에 대한 설명이다. 계수 정렬의 특징으로는 선형시간에 알고리즘이 동작하게 되는것, 안정적인 정렬 알고리즘인 것과 제자리 정렬 알고리즘이 아닌 것이 특징이다.84. 기수 정렬에 대한 설명으로 올바른 것은?(2019기말)(5장 203p)① 비교 기반의 정렬 알고리즘이다.② 입력 원소의 값의 자릿수가.
2020학년도 1학기 기말시험(온라인평가) 제출용교과목명 : Java 프로그래밍학 번 : -성 명 :연 락 처 : 010-평가유형 : 주관식형 (과제물형, 주관식형, 혼합형 중 해당 유형 표기)---------------------------------------------------------------------------o 주관식형 : ※ 주관식일 경우 문제번호 표기 후 답안 작성o 과제물유형 : ( 공통 )형 ※평가유형이 과제물일 경우 해당 유형 작성(예:공통, A/B/C/D/E 형)o 과제명 :2장(Java 기본문법)다음은 배열의 선언문이다. 이 중 오류가 발생하는 선언문은?int[] array1;int array2[11];int[][] array3;int[] array4[];(답)(해설) 교재 50쪽에 배열의 선언 , 초기와 및 생성에 관한 설명이 있다. 배열의 선언에는 몇가지 규칙이 있는데,선언한 뒤 초기화나 생성의 과정을 거쳐야만 사용할 수 있다.선언할 때 배열의 크기를 지정할 수 없다.다차원 배열은 255차원까지 선언할 수 있다.위의 규칙에 따라서 2번 답의 경우 선언할 때 배열의 크기를 지정하고 있으므로 잘못된 선언문이다. 4번의 경우 오류는 아니지만 좋지 않은 표현이라 할 수 있다.4장(인터페이스와 다형성)아래 인터페이스를 정상적으로 구현한 것은?(답)(해설) 교재 106쪽 - 120쪽에 인터페이스에 대한 설명이 나와있다. 인터페이스를 상속받을 때에는 ‘extends’가 아닌 ‘implements’ 를 사용하여 구현한다. 인터페이스를 구현 할 때에는 인터페이스에 정의되어 있는 추상메소드를 반드시 정의해야 한다. 즉, implements 키워드로 구현하고, 인터페이스에서 추상화한 메소드를 정확히 구현하고 있는 답을 선택 할 수 있다.6장(패키지와 예외처리)예외처리를 하는데 있어서, 시스템 구조상의 문제로 발생하는 심각한 오류인 Error와 프로그램의 문제로 발생하는 경미한 오류를 Exception 으로 분류한다. 아래 보기 중 Exception 분류가 다른 한가지를 선택하라.NullPointerExceptionIOExceptionIndexOutOfBoundExceptionSystemException(답)(해설) 교재 180쪽 – 182쪽에 나와있는 예외 처리 부분에 대한 문제이다. Exception은 ‘checkedException’ 과 unchecked Exception’으로 나뉘는데, 그 분류에 대한 문제이다. ‘chekced Exception’은 컴파일러가 반드시 확인하는 예외를 말하며, ‘unchecked Exception’은 컴파일러가 예외처리 구문의 포함 여부를 확인하지 않는 예외이다. RuntimeException 의 서브 클래스로 분류되는 예외가 여기에 해당된다. 보기 2번의 IOException 은 시스템이 제공하는 입출력과 관련된 메소드를 사용할 때 발생할 수 잇는 대표적인 ‘checked Exception’ 이다. 그 외 널 객체의 메소드를 호출하는 경우나, 숫자를 0으로 나누는 등의 예외가 unchecked Exception 이다.8장(java.io 패키지와 스트림)다음 설명에 해당하는 스트림을 선택하시오.FileReader/FileWriterFileInputStream/FileOutputStreamInputStreamReader/OutputStreamWriterBufferedInputStream/BufferedOutputStream(답)(해설) 교재 253쪽 - 255쪽에 해당 설명이 나와있다. 1번 보기는 텍스트 문서에 대해서만 입출력을 수행하는 스트림이며, 2번은 파일로부터 데이터를 바이트 단위로 입출력을 하는 스트림으로 모든 파일에 대한 입출력이 가능하다. 3번은 바이트 스트림과 캐릭터 스트림을 호환시킬 때 사용되는 스트림이다. 실제로는 자주 사용되지 않는다.10장(컬렉션)컬렉션에 대한 설명중 틀린 것을 선택하시오.HashMap : Map 인터페이스를 구현하는 클래스로서 두 개의 값으로 구성된 자료를 관리하도록 만들어졌다. 이때 두 개의 값은 키와 값을 의미하는데 키는 자료를 검색하는 용도로 사용되고 값에 실제 자료가 저장된다.HashSet : Set 인터페이스를 구현하는 클래스로 마치 집합처럼 순서에 상관없이 중복을 허용하지 않으면서 자료를 관리할 수 있게 해준다.ArrayList : List 인터페이스를 구현한 클래스로 같은 자료가 중복되어 입력될 수도 있고 입력된 순서대로 자료가 관리되기 때문에 특정 위치에 잇는 자료를 직접 참조할 수 있다.LinkedList : ArrayList 처럼 List 인터페이스를 구현하기 때문에 동일한 방법으로 사용될 수 있다. 하지만 Stack 인터페이스도 함께 구현하고 있기 때문에 Stack 인터페이스에 정의되어 있는 메소드도 사용할 수 있다.(답)(해설) 교재 310쪽 - 326쪽에 컬렉션에 관한 설명이 있다. LinkedList 가 구현하고 있는 클래스는 List와 Queue 인터페이스이다. 따라서 Queue 인터페이스에 정의되어 있는 메소드도 사용할 수 있다.12장(AWT 컨트롤 클래스)다음이 설명하는 레이아웃을 선택하시오FlowLayoutGridLayoutBorderLayoutCardLayout(답)(해설) 교재 378쪽 - 386쪽에 배치관리자에 대한 설명이 나와 있다. BorderLayout은 기본 배치관리자로 EAST,WEST,SOUTH,NORTH,CENTER 영역으로 설정되어있다. GridLayout 은 자식 컴포넌트를 배치할 영역을 격자 또는 바둑판 형식으로 분할한 후 각 격자에 하나씩 차례로 배치하는 것을 말한다. CardLayout은 컨테이너에 포함된 컴포넌트를 각각 하나의 카드로 간주하고 한 번에 하나의 카드만 화면에 나타나도록 한다.14장(JDBC 프로그래밍)다음 중 객체에 대한 설명으로 틀린 것을 고르시오.ResultSet : getResultSet(), executeQuery() 메소드가 리턴하는 객체로 select 구문 실행결과를 다룰 때 사용된다.DatabaseMetaData : Connection 객체의 getMetaData() 메소드로 생성되는 객체로, JDBC 드라이버의 정보를 포함하고 있다.Statement : Connection 객체의 createStatement() 메소드로 생성되는데 SQL 질의를 실행하는데 사용 된다.PreparedStatement : SQL문을 미리 컴파일 하여 실행하기 직전의 상태로 만들어 둔 후 실제 실행은 나중에 필요에 따라 여러 번 시킬 수 있다. 같은 SQL문을 여러 번 실행시켜야 하는 경우에 효과적이다.(답)(해설) 교재 440쪽 - 450쪽에 설명이 나와 있다. DatabaseMetaData 객체는 JDBC 드라이버의 정보를 포함하는 것이 아닌 DBMS의 정보를 포함하고 있다.