korean university

22
1. 해해, 해해, 해해해해? 해해 해해해해 해해해 해해해해 해해 해해해 해해해 해해해 해해, 해해해 해해해 해해해 해해해해 해해 해해해 해해해해 해해해해해 해해해해 해해 . 해해해해 해해해해 해해해해 해해 해해해 해해 해해해 해 해해해 해해해 해해해 해해해 해해해해 해해 해해. 해해 : 해해해해해 해해 해해해 해해 . 해해 : 해해 해해해 해해 , 해해 해해해 해해해 해해해 . 해해 : 해해해해해해해 해해해 해해해해해 해해해해 해해 해해해해. 해해해 : 2. 해해해해해해해 해해 해해해해해 해해해 해해해 해해 해해해해해 해해해 해해해 해해 해해해 해해 해해 , 해해 해해 해해 해해해 해해 해해해해 해해 해해해 해해해 해해해해 . 해해 해해해해해 해해해 해해 해해해 해해 해해 해해해 , 해해해 해해해해해 해해 해해해 해해 해해 해해해해 , 해해해해해 해해해해해 해해해해해 해해 해해해해 . 해해 해해해해 해해 해해해 해해해 해해 해해해 해 해해해 해해해해 해해해, 해해해해해 해해 해해해 해해해해해해 해해해해 해해해해 해해해해 해해 해해해해. 해해해해해해해 , 해해해해 해해해해 해해해해 해해해 해해해 해해 해해해해 해해해해 해해해해해 . 해해해해해 해해해해해 . 해해해 해해해해해 해해 해해해 해해해해 해해해해해해해 해해해해. 해해 해해 해해해 해해 해해해해해 해해해 해해해 해해 해해해 해해해해 해해해해 해해 해해, 해해 해해 해해해 해해 해해 해해해 해해 해해해 해해해해 해해. 3. 해해해해? 해해해해해 해해해해 해해해해해해 해해해해해해. 해해해해 해해해 해해해 해해해 해해해해해 해해해해해해해해 해해해해해 해해해 해해 해해해해.

Upload: mediassu

Post on 27-Apr-2015

432 views

Category:

Documents


0 download

DESCRIPTION

University interview

TRANSCRIPT

Page 1: Korean University

1. 해쉬, 탐색, 클래스란?

해싱

검색할때 키값을 비교하는 것이 아니라 계수적 성질을 이용, 계산에 의하여 주소를 결정하여

기억 공간에 레코드를 보관하거나 검색하는 방법 . 키값에서 레코드가 저장되어 있는 주소를

직접 계산한 후 산출된 주소로 곧바로 접근이 가능하게 하는 방법.

① 장점 : 효율적이고 검색 시간이 빠름 .

② 단점 : 기억 장소를 낭비 , 버켓 크기의 설정이 어려움 .

탐색 : 탐색하고자하는 키값을 받아들여서 레코드를 찾는 알고리즘.

클래스 :

2. 조합논리회로와 순차 논리회로의 특징과 차이점

순차 논리회로는 이전의 상태에 대한 정보를 갖고 있고 , 이에 따라 같은 입력을 받는 경우에도

다른 결과를 출력할 수 있습니다 .

조합 논리회로는 상태에 대한 정보는 갖고 있지 않으며 , 오로지 입력신호에 따라 출력을 하게

되어 있으므로 ,

입력신호가 동일하다면 출력신호가 다를 수 없습니다 .

결국 순차라는 말의 의미는 시간에 따라 변화할 수 있음을 암시하는 말이고,

조합이라는 말은 회로의 구성조합에만 의존하는 회로임을 암시하고 있는 것입니다.

순차논리회로란 , 입력값이 들어가서 출력으로 나오고 또 그 출력이 다시 입력으로 작용하는

회로입니다 . 플립플롭이 그것입니다 . 따라서 플립플롭을 써서 회로를 구성하면 순차논리회로가

되는거죠.

조합 논리 회로는 어느 시점에서의 출력이 오로지 그 때의 입력에 따라서만 결정되는 회로 이고,

순차 논리 회로는 조합 논리 회로에 기억 요소를 포함하고 있다.

Page 2: Korean University

3. 플립플롭?

플립플롭은 동기식과 비동기식으로 나누어집니다. 동기식은 클럭이 있었서

클럭이 들어갈때만 동작을하는것이고 비동기식은 클럭이 없는 것입니다.

RS플립플롭 : 기본이 됩니다. 두개의 NAND 게이트로 이루어져 있습니다 .

두개의 입력과 두개의 출력으로 되었고 출력이 다시 입력으로 들어가

게 되죠 . 암튼 입력이 0,0 일때 출력은 이전값의 보수가 되는것이죠.

나머지 플립플롭은 기본적으로 RS플립플롭을 가지고 만듭니다.

JK 플립플롭: RS 와 마찬가지로 이전값의 보수화이지만 , RS 에서는 입력이 1,1 이

들어갈수 없는 것 ( 회로가 탑니다 ) 을 보안한거죠 .

T 플립플롭: 토글입니다 . 반전이죠 . 1->0 , 0->1 이 됩니다 .

D 플립플롭: 딜레이 입니다 . 시간지연입니다 . 0->0 , 1->1 값은 변화가 없습니다 .

이런 특징을 가지고 여러가지 회로를 구성하는데 이용합니다. 특히 플립플롭은 출력값

이 입력으로 들어가기 때문에 값이 저장이 됩니다. 때문에 메모리나 레지스터를 구성하는데

쓰여지기도 합니다.

5. 스택과 큐는 뭔가?

스택 : 자료의 삽입과 삭제가 top이라는 한쪽 끝에서 행해지는 선형리스트. LIFO (last in first

out,후입선출)

큐 : 자료의 삽입이 한쪽끝에서 이루어지고 삭제가 반대쪽 끝에서 이루어지는 순서리스트. FIFO

Page 3: Korean University

(first in first out,선입선출)

6. class와 object에 대해 설명

- 클래스 -

객체지향 프로그래밍(OOP)에서 클래스는 특정 종류의 객체내에 있는 변수와 메쏘드를

정의하는 일종의 틀(template)이다. 따라서, 객체는 클래스로 규정된 인스턴스로서, 변수 대신

실제값을 가진다.

- 객체 -

객체지향 프로그래밍에서 객체는, 프로그램 설계 단계에서 최초로 생각해야 할 것으로서, 결국

프로세스에서 유도된 코드 단위들이다. 중간에, 각 객체는 일반화된 객체 클래스로 만들어지고

더욱 일반화된 클래스가 정의됨으로써, 객체가 모델을 공유하고 그 코드에서 클래스 정의를

재사용할 수 있게 한다.

=> 클래스를 붕어빵의 틀로 본다면 객체는 붕어빵 자체이다 . 단 팥을 넣던지 잼을넣던지

나오는 결과물의 내용은 틀리지만 형태자체는 클래스인 붕어빵 틀의 모양인 붕어빵이 된다 ..

7. 상속,인캡슐레이션은 무엇인가?

인캡슐레이션 : 캡슐화가 필요한 이유는 그다지 알 필요가 없다는 것이 그 첫째 이유이다. 그냥

어떤 작업을 수행해야할때 필요한 객체만 가져다 쓰면 되기 때문에 알 필요가 없다. 두번째는

정보의 보호다. 만약 다른 사람이 그 정보를 임의대로 고쳐서 사용할 수 없게 하거나 완전 다른

객체로 만들면 사용자들은 혼란을 겪게 될 것이다. 그래서 캡슐화 시킨다.

예를 들면 캡슐에 들어있는 약을 열어서 성분이나 어떤 약제가 들어있는지 알 필요없이 어떤

증상에 복용하면 되는지 알면되듯이 캡슐화를 하는것 역시 해당 내용보다는 어디에 쓰이는지만

Page 4: Korean University

알면되고, 해당 성분을 바꾸면 안되듯이 캡슐화 역시 정보를 임의로 변경할 수 없도록 하기 위한

보안적 측면도 있다.

상속 : 어떤 클래스(부모 클래스)의 속성과 메소드를 다른 클래스(자식 클래스)가 이어 받아

사용할 수 있는 것.

10. 시간 복잡란?

풀고자 하는 문제에 대해 전체 알고리즘에서 수행되는 가장 중요한 기본연산들의 실행 추정시간.

11. Heap구조는 어떻게 되어있나?

힙은 순서가 일정한 규칙이 없으며, 포인터 변수를 통해 동적으로 할당받고 돌려주는 특징을

갖고있다. 최대값과 최소값으로 tree구조로 정렬(heap sort)로도 사용된다.

12. max 힙 과 min 힙에대해서 설명해 보아라.

max heap : 숫자들 중에서 가장 큰 값이 트리의 루트에 저장되는 방식

min heap : 숫자들 중에서 가장 작은 값이 트리의 루트에 저장되는 방식.

13. 버블소트, 힙소트, 퀵 소트, 그것들의 시간복잡도?

버블정렬 : 서로 인접한 레코드들끼리 비교하여 순서가 맞지 않으면 위치를 서로 바꾸면서

정렬하는 방식. 시간복잡도 O(n2)

힙정렬 : 완전이진트리의 개념으로 가장 큰 키 값을 가지는 루트 노드를 삭제하는 과정을

계속해서 반복하여 정렬하는 방식이다. 시간복잡도 : O(n log2n) , 큐를 사용한다.

퀵정렬 : 배열을 두 부분으로 분할한 다음에 피벗을 기준으로 크고 작은 값을 나누며 그 분할된

부분을 재귀적으로 정렬. O(n log2n), 스택을 사용하며 분할-정복 개념이다. 최악의 경우는

Page 5: Korean University

피벗으로 가장 작은수가 선택되는 경우이며 이 경우 O(n2)의 시간 복잡도를 갖는다.

14. 정렬 알고리즘을 생각나는대로 말하시오.

삽입정렬, 선택정렬, 버블정렬, 쉘정렬, 합병정렬, 퀵정렬, 힙정렬

15. 당신이 정렬을 할 때 어느 알고리즘을 선택하겠는가. 그 이유.

퀵정렬 or 힙정렬, 속도면에서는 퀵정렬이 빠르지만, 최악의 경우 피벗으로 가장 작은 레코드가

선택되는 경우로 시간복잡도가 O(n2)가 된다. 반면 힙정렬은 퀵정렬보다는 느리지만 최악의

경우에도 O(nlogn)의 시간 복잡도를 갖으므로 안정적이라고 본다.

16. linked list를 구성하고 사용하기위해 필요한 연산들이 무엇이 있는가.

- 자료가 연속적으로 저장되어 있으며 이들 사이에 논리적인 관계를 가지고 있는 자료 집합체

2.2.1 선형리스트(Linear List)

(1) 개요

    - 데이터들이 기억장소에 연속적으로 저장되어 있는 자료구조를 말하며 , Dense list

    - 연결 리스트에 비해 임의 노드 접근이 편리하다

    1) 장점 - 데이터가 연속적으로 저장되어 기억장소의 낭비가 적다

    2) 단점 - 데이터의 삽입 , 삭제시 데이터 이동 회수가 많다

(2) 삽입(insertion)

    - n개의 노드로 구성된 선형 리스트에서 임의의 노드를 삽입하려면 삽입하려는 위치 이후의

자료를 모두

      이동시켜야 한다

    - 평균 이동 회수 = (n+1)/ 2

(3) 삭제(deletion)

    - n개의 노드로 구성된 선형 리스트에서 임의의 노드를 제거하면 제거하려는 위치 이후의

자료가 모두

      이동된다

    - 평균 이동 회수 = (n-1)/2

2.2.2 연결리스트(Linked List)

Page 6: Korean University

- 구현하기 위하여 필요한 기능

원소내의 자료들과 다음 원소의 포인터를 포함하는 노드 구조를 정의할 수 있어야 한다

필요할 때 노드를 동적으로 생성할 수 있어야 한다

사용 후 불필요한 노드를 반납할 수 있어야 한다 .

노드 할당 : malloc() , 삭제(반납) : free()

(1) 개요

    - 삽입과 삭제가 빈번한 경우 적합

    - 하나의 노드는 자료부분과 링크부분으로 구성된다

    - 자료의 배열이 기억장소의 주소와 일치하지 않으며 기억공간이 독립적이다

    - 이용 : Topological sort, AVL 트리, 최소비용 스패닝 트리

      1) 장점 - 노드를 연속적으로 저장하지 않아도 된다 ( 삽입 , 삭제가 쉽다 )

              - 여러 개의 리스트를 한 개의 리스트로 쉽게 만들 수 있다

      2) 단점 - 링크부분을 위한 기억장소가 필요하다

 

(2) 단순연결 리스트(singly linked list)

    - 한 노드에 1차원 배열 관계가 있는 다음 노드의 주소를 갖는 한 개의 링크부분을 두고

마지막 노드의

      링크는 null로 표현, 해싱에서의 체이닝

          <삽입 알고리즘> 

→     →     →

                  DATA          LINK

rear  

                   X

                                  I

              DATA(I) ← 'rear'

              LINK(I) ← LINK(X)

              LINK(X) ← I

(3) 원형연결 리스트(circular linked list)

    - 단순연결 리스트는 마지막 노드가 null link를 갖는데 이 널 링크 대신 리스트의 처음 노드의

포인터를

      갖도록 구성한 리스트

    1) 장점 - 어느 한 노드로부터 다른 모든 노드에 접근할 수 있다

            - 임의의 노드 검색 시 첫 노드부터 찾지 않고 현재 노드부터 검색할 수 있다

Page 7: Korean University

            - 결합, 분리 작업에 효율적, 큐 구축 가능

    2) 단점 - 노드 검색 시 무한 루프에 빠질 수 있다

    3) 무한루프의 방지 - head node 를 두어 무한 루프를 제거한다

 

(4) 이중연결 리스트(double linked list)

    - 노드가 한 개의 데이터 부분과 두 개의 링크 부분으로 구성된다(좌, 우 링크)

    1) 장점 - 노드 검색시 양방향 검색이 가능하므로 속도가 빠르다 , 선행노드의 검색이 쉽다

            - 한 노드의 포인터가 파괴되었을 때 복구가 가능하다

    2) 단점 - 두 개의 링크를 저장할 기억공간 낭비

LLINK A RLINK→

←LLINK B RLINK

←LLINK C RLINK

   

     * 삭제 알고리즘

      B(LLINK(RLINK)) ← B(RLINK)

      B(RLINK(LLINK)) ← B(LLINK)

      AVAIL ← B

(5) 이중원형연결 리스트(doubly circular linked list)

    - 마지막 노드의 RLink는 처음 노드를 가리키게 하고 처음 노드의 LLink는 마지막 노드를

가리키게 함

    1) 장점 - 마지막 노드까지 데이터가 저장되었을 때 빈 노드를 찾아 입력할 수 있도록 많은

융통성 부여

            - 무한루프에 빠지는 것을 방지

    2) 단점 - 알고리즘의 구현이 매우 복잡

    * 삽입 알고리즘(P 삽입, X 선행)

      LLINK(P) ← X

      RLINK(P) ← RLINK(X)

      LLINK(RLINK(X)) ← P

      RLINK(X) ← P

17. linked list에서 특정 node 하나를 삭제하는 방법.

해당 linked list내에서 삭제하고자 하는 node값이 나올때까지 loop를 돌면서 해당값을

비교해보고 해당값과 일치한다면 free 함수를 이용하여 삭제시킨다.

Page 8: Korean University

18. 트리 순회방식을 생각나는대로 말하시오. (트리의 운행)

전위순회(preorder) : Root -> Left -> Right (ex : a,b,d,e,c,f ) VLR

중위순회(inorder) : Left -> Root -> Right (ex : d,b,e,a,c,f) LVR

후위순회(postorder) : Left -> Right -> Root (ex : d,e,b,f,c,a) LRV

레벨순서순회(levelorder) : 루트에서부터 레벨 순서대로 차례로 각각 방문하는 방법. 레벨이

작은곳 -> 큰곳으로 , 값이 같은 경우 왼쪽 -> 오른쪽으로.. (ex : 하향-a,b,c,d,e,f / 상향-

d,e,f,b,c,a)

19. 입력이 순차적으로 들어올 때 BST를 구성하는 방법을 설명하라. (binary

search tree)

입력하는 값과 루트의 값을 비교하여 만약 값이 같다면 false를 반환하고 입력값이 루트의

값보다 작다면 왼쪽 부트리에서 다시 입력값이 들어갈 위치를 찾는다(비교 후 작으면 왼쪽 크면

오른쪽)

만약 입력값이 루트값보다 크다면 오른쪽 부트리에서 입력값이 들어갈 위치를 찾는다.

20. BST를 이용해 탐색할 때 최악의 경우는 어떤 경우인가.

예를들어 1,2,3...n 의 순서로 키 값이 삽입되는 경우 이진탐색트리는 오른쪽 사향트리가 되어

높이가 n 이 된다 따라서 최악의 경우 노드 탐색에 O(n)의 시간이 소요된다. 평균 시간 복잡도는

O(log2n)이다.

21. 추가질문: 이 최악의 경우를 해결하는 방법은 무엇인가.

AVL트리를 사용하여 해결할 수 있다. AVL트리는 높이 균형 이진탐색트리(height balanced

binary search tree)이다. 높이 균형이란 트리내 모든 노드에 대해 왼쪽과 오른쪽 부트리의

Page 9: Korean University

높이 차가 1이하인 것을 의미한다. 높이 균형이 깨지는 경우 회전(rotation)연산에 불균형을

해결할 수 있다. 회전연산이 수행되기 위해서는 균형인수(balance factor)를 유지해야 한다.

균형인수 = 오른쪽 부트리의 높이 - 왼쪽 부트리의 높이

22. 부울대수의 정의를 말하시오.

부울 대수는 0 과 1 의 두 요소와 ̀ ․ `(AND), `+`(OR), `-`(NOT) 의 세연산자로 구성되며 , 목적은

복잡한 디지털 회로의 해석과 설계를 쉽게 하기 위함이다 .

기본적인 공리(公理, postulate)에는 4가지가 있다.

(공리 1) 부울대수에서 사용되는 모든 변수는 2개의 값 "0" 또는 "1" 중 하나만 가질 수 있다.

= 1 이 아니면 = 0 = 0 이 아니면 = 1

(공리 2) 부정의 동작은"  ̄ "로 표시하고, 다음과 같이 정의된다.

부울변수 = 0 일 때 = 1 부울변수 = 1 일 때 = 0

(공리 3) 논리연산 AND는 기호를 "·"로 나타내고, 다음과 같이 정의된다.

0·0 = 0 0·1 = 0 1·0 = 0 1·1 = 1

(공리 4) 논리연산 OR는 기호를 "+"로 나타내고, 다음과 같이 정의된다.

0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 1

23. cache와 virtual memory의 공통점과 차이를 비교하라.

cache : 캐시란 장치와 장치 사이의 속도 차이를 극복하고 자주 사용하는 데이터를 임시

저장하여 줌으로써 엑세스 속도를 향상시키는 전반적인 기법을 말합니다 . 접근속도가 가장 빠른

SRAM 을 사용한다 .

virtual memory : 메모리는 컴퓨터 작업이 이루어지는 공간으로 이 공간이 좁으면 제대로

Page 10: Korean University

프로그램을 실행할 수 없을 뿐 아니라 프로그램 실행 속도나 처리 속도가 느려지기 마련이다.

그러므로 시스템을 좀더 빠르게 사용하고 싶다면 메모리가 충분해야 한다. 메모리는

주기억장치로 램을 뜻합니다 . 메모리가 크면 클수록 시스템의 성능은 최적화되고 빨라진다 .

필요한 메모리보다 물리적 메모리가 부족한 경우 하드 디스크를 이용하여 가상의 메모리를

구성하여 사용하지만 하드 디스크가 램보다 속도가 느리므로 램보다 효과적이지는 않다 .

공통점 : 속도향상을 위하여 사용한다 .

차이점 : 사용되는 장치가 RAM 과 하드디스크의 차이점 . 캐시는 장치와 장치사이의 속도

차이극복을 위하여 쓰지만 가상메모리는 프로그램 실행이나 운영체제 구동에 있어 원활한

실행을 위하여 존재한다 .

24. 라우터?

라우터는 목적지의 주소를 보고 ★가장 적당한 경로를 찾아서★ 다음 네트워크 망으로 보내주는

역할을 합니다. 즉! 서로 다른 네트워크 망 끼리 정보를 전달하기 위해서 주소를 보고 최적절한

경로로 신호를 보내는 역활을 하는것입니다.

25. 깊이우선탐색(Depth First Search)?

깊이 우선 탐색은 트리의 전위순회방식(preorder)을 일반화시킨 그래프의 정점(vertex) 순회

방법.

탐색도중 인접된 모든 정점이 이미 방문된 정점을 만났을 때 바로 이전에 방문한 정점으로

돌아가기 위해 스택을 이용 한다.

26. 너비우선탐색(Breadth First Search)?

주어진 정점 v를 출발점으로 하여 이를 방문한 후 방문표시를 하고 v의 인접리스트에 있는 모든

Page 11: Korean University

정점들을 차례로 즉시 방문한다. 그리고 v의 인접리스트 상에 존재하는 첫 번째 정점에 인접한

방문하지 않은 정점들을 모두 차례로 방문한다. 이 때, 각 정점을 방문할 때마다 그 정점을 큐에

저장한다. 하나의 인접리스트에 대해 방문이 끝나면 큐에서 한 정점을 꺼내서 그 정점에 대한

인접 리스트의 정점들을 동일한 방법으로 계속 방문한다. 너비우선탐색은 큐를 이용 한다.

27. "OOP가 뭔가?"

Object-Oriented Programming. 객체 지향 프로그래밍

1) 캡슐화 (Encapsulation)

- 데이터와 그를 구성하는 Code를 같이 묶어 구조화하는 것을 말하며

- 그로 인하여 외부의 간섭과 오용을 막을 수 있습니다.

: Private, Public 변수/함수

2) 다형성 (polymorphism)

- Function Overloading, Operator Overloading

- 예를들어 동일 연산을 하지만 Return값이 int, double, long 세가지가 따로

있다면 C의 경우 3개의 다른 이름을 가진 Function을 만들어야 하지만 C++에서는

1개의 이름으로 사용하 실 수 있습니다.

3) 상속성 (Inheritance)

- 각 객체가 다른 객체로부터 속성을 상속 받을 수 있는 기능

: Class를 선언하고 이를 다른 이름으로 상속 받은 후 재 사용이 가능합니다.

28. 객체지향에서 다형성에 대해 설명하라

Page 12: Korean University

다형성이란 같은 객체이지만 , 조건에 따라 다르게 작용한다는 의미이다 . 예를 들어 계산기에서

덧셈을 할때 덧셈을 하는 공식은 같지만 입력하는 값에 따라 결과가 다르다 .

29. 어셈블리어 쪽에서 매크로 정의

매크로란, 어셈블리 구문들을 하나로 묶어놓은 것이다. 겉으로 보기엔 프로시져와 매우 유사한

형태를 갖고 있다. 하지만 C에서의 매크로 함수와 같아서, 스택에 수많은 push와 pop을 해가며

함수를 호출하는 것이 아니라, 단지 코드가 덧씌워질 뿐이다. 따라서 속도는 매우 빠른 장점을

지닌 반면, 조심해서 사용하지 않으면 코드가 덧씌워지기 때문에 프로그램의 크기가 매우 커질

것이다.

30. C의 포인터 개념에 대한 예와 포인터에 대해서 설명해라

모든 변수는 기억장소의 주소값을 갖고 있는데 포인터는 다른 변수의 기억장소 주소를 저장

또는 참조하기 위한 변수이다. 포인터형 변수에 형식(int,char,float)을 지정하는 이유는 각

형식마다 사용 바이트가 틀리기 때문입니다.

call by reference : 주소에 의한 전달 방식으로 매개변수에 값을 넘기는 것이 아니라 변수의

주소를 넘기면 호출한 변수의 값을 변경한다.

call by value : 기본 인수 전달 방법,값을 직접 전달하는 방법으로 전달된 인수는 값이

매개변수에 복사되어 인수에는 아무 영향을 미치지 않는다.

int i,*p;

i=30; // 변수 I에 정수 값 30을 저장

p=&i; // 변수 p에 변수 I의 주소를 저장한다

Page 13: Korean University

printf("%d\n",*p); //포인터 p를 이용하여 I의 값을 출력한다. 값은 30이 나온다.

31. TCP/IP가 뭔가?

인터넷상의 컴퓨터들 사이에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용되는

프로토콜이다. IP가 실제로 데이터의 배달처리를 관장하는 동안, TCP는 데이터 패킷을 추적

관리한다

32. 선형구조와 비선형구조의 종류 그리고 설명

(1)선형구조 : 배열(array), 스택(stack), 큐(queue), 데크(deque), 연결리스트(linked list)

①배열 : 연속적인 기억공간에 배정하며, 각 요소들은 동일 데이터 타입으로(인덱스,값)의

쌍으로 표현한다. 1차원, 2차원, 3차원 등의 배열이 있다

②스택 : 일정한 연속공간에서 데이터의 삽입과 삭제가 한쪽에서 이루어지는 방식(LIFO),

응용분야는 서스루틴호출,순환 프로그램, 인터럽트처리,수식계산,컴파일러 등

③큐:일정한 연속공간에서 데이터의 삽입은 한쪽 끝에서, 삭제는 다른 한쪽에서

이루어지는 방식(FIFO), 응용분야는 운영체제의 작업스케줄링 등

④데크:일정한 연속공간에서 데이터의 삽입과 삭제가 양쪽에서 이루어지는 방식

scoll : 입력을 하나 제한한 데크 shelf : 출력을 하나 재한한 데크

⑤연결리스트 : <데이터부분,링크부분>으로 구성된 노드(node)에서, 링크부분에 다음

노드를 가리키기 위해 다음 노드의 주소를 저장하는 방식

(2)비선형구조 : 트리(tree), 그래프(graph)

①이진트리 : (L : 왼쪽링크, D : 데이터, R :오른쪽링크)로 구성된 노드에서, 두 링크에

왼쪽 자식과 오른쪽 자식 노드의 주소를 저장하는 방식, 트리순회 방식에는

전위순회(D→ L→ R),중위순회(L→ D→ R), 후위순회(L→ R→ D)방식이 있다

②그래프 : 사이클이 형성되는 자료구조로서 트리의 일반 형식, 그래프의 순회 방식에는

깊이우선탐색(DFS), 너비우선탐색(BFS) 방식이 있다

Page 14: Korean University

33. 트리와 그래프의 차이

그래프는 트리의 일반형식으로 정점 (vertex) 와 간선 (edge) 의 모임 이라고 볼 수 있다.

그래프에서 사이클은 시작점과 끝점이 같은 길이가 3 이상인 단순경로를 사이클 이라고 하며

하나이상의 사이클을 갖는 그래프를 순환 그래프 라고 한다. 트리는 사이클을 갖지 않는 비순환

그래프이다 .

- 트리는 n 개의 정점 (vertex) 을 갖는 모든 트리는 n-1 개의 간선 (edge) 을 갖는다 .

- 트리에 하나의 간선 (edge) 을 추가하면 사이클이 형성된다 . ( 그래프 )

34. 데이타 계층구조

1) 계층 1 (물리계층, Phisical Layer) : 전기적 신호 전송

최하위층으로 하드웨어와 연결되는 물리적인 접속을 처리하며 전송매체와 전달방식, 그리고

랜카드등에 관련된 부분을 처리하기 위한 계층이다.

2) 계층 2 (데이터링크계층, Data Link Layer) : 인접장치간의 정보 전송

데이터 전송을 위해 전송방식, 에러 검출 및 처리, 상황에 따른 데이터 흐름의 조절 등을

처리하기 위한 계층으로 데이터를 패킷으로 나누는 역할을 담당한다.

3) 계층 3 (네트워크계층, Network Layer) : 정보 교환과 중계

데이터링크계층으로 부터 받은 패킷들의 정보를 읽어 목적지까지 정확하게 전달될 수 있도록

네트워크 내에 복잡하게 연결되어 있는 장치간의 경로배정 및 중계기능을 수행하고 장치들을

연결하여 데이터 전송을 하는데 필요한 절차들을 처리하기 위한 계층이다. 또한 네트워크

계층에서는 한 데이터를 여러개의 연속적인 패킷으로 분리하여 전송할 경우 패킷이 순서대로

전달될 수 있도록 보장해 준다. TCP/IP의 IP에 해당하는 부분이기도 하다.

Page 15: Korean University

4) 계층 4 (전송계층, Transport Layer) : 송수신 시스템간의 신뢰성 제공

전달계층은 연결된 두 장치간의 신뢰성있는 데이터 전송을 위한 계층이다. 전달 계층은 긴

메시지를 작은 단위의 패킷으로 나누어 주는 것으로 발생하는 에러를 검출해줌으로써

하위계층에서 보다 효율적으로 데이터를 전송할 수 있도록 해준다. 또 순서에 관계없이 수신된

패킷을 합쳐서 원래의 메시지로 복구시키는 기능을 수행하므로 상위게층에서의 작업이

순조롭게 진행될 수 있도록 해준다. TCP/IP의 TCP에 해당한다.

(1) TCP : 두개의 호스트간에 연결된 데이타의 흐름을 보장하는 프로토콜로서 하위 네트워크

계층에서 사용할 자료 chunk를 자르고 받은 패킷에 대해 Ack를 보내고 다른쪽의 Ack를 위해

Timeout을 지정하는 등의 일을 한다.

(2) UDP : 상위레이어에 대해 훨씬 더 간단한 서비스를 제공한다. UDP는 단지 두개의

호스트간에 하나의 패킷을 보내는 일을 한다. 이를 테이터그램(datagram)이라 한다. 그러나 이

패킷이 상대 호스트에 도착하는 여부에 대해서는 보장하지 않는다. 이런 신뢰성을 보장하기

위해서는 어플리케이션에서 이를 보장하도록 만들어야 한다.

5) 계층 5 (세션계층, Session Layer) : 응용 프로세스간의 회선 형성 및 동기화

이 계층은 시스쳄간의 정보교환을 위한 세션의 연결과 조정을 담당하며 논리적 통신 선로인

선의 처리 및 센션을 통산 데이터의 전송 절차에 관하여 규정하고 있다. 또한 통신 도중 발생할

수 있는 세션의 이상 상태를 복구하여 적절한 상태에서 통신이 이루어질 수 있도록 함으로써

응용 프로세스간의 통신을 위한 서비스를 제공한다.

6) 계층 6 (표현계층, Presentation Layer) :데이터의 형식 설정 및 코드변환

운영체제, 파일시스템과 관련이 있으며 서버와 클라이언트간의 상이한 데이터 표현방식 및

부호체계를 서로 변환하여 주는 서비스를 제공한다. 또한 데이터의 보안을 유지하기 위해

Page 16: Korean University

암호화에 관하여도 규정하고 있는데 통신기능과는 무관하지만 통신을 하는데 수반되는

데이터의 처리에 관련한 사항들을 규정함으로써 응용 계층의 통신을 도와주는 계층이다.

7) 계층 7 (응용계층, Application Layer) : 응용 프로세스간의 정보 교환

사용자가 응용프로그램을 통하여 네트워크 환경을 이용할 수 있도록 응용 프로세스간의 정보

교환을 실현해 준다. 예로써 TELNET, FTP등 각종 네트워크관련 프로그램들이 응용계층에

해당한다.

35. 운영체제 기법 중 세그맨테이션과 페이징의 차이점

페이징 기법 : 프로그램을 페이지 단위로 나누어 분할한 뒤 적재한다.

(비연속적으로 메모리를 할당해도 되는 장점이 있으나, 실행하기 전에 프로그램 모두를

메모리에 적재한다.)

세그멘테이션 기법 : 실행할 프로그램을 세그먼트로 나누어 메모리에 적재합니다.

세그먼트란? 논리적인 단위로서 일정한 크기의 페이지와는 달리 가변적인 크기를 갖습니다.

페이징은 .. 프로세서를 일률적으로 나누워서 페이지 테이블 이라는 매개체를 통하여 물리적

공간에 매치 시키는 방법입니다 . 세그멘테이션은 일률적인 단위로 프로세서를 나누는

것이아니라 , ' 사용자 ' 측면에서 나누는 방식이지요

36. 교체알고리즘

FIFO(first in first out) : 각 페이지가 주기억 장치로 올때마다 타임스탬프를 찍어 두고

페이지가 교체될 필요가 있을때 가장 먼저 주기억장치에 들어와 있는 페이지와 교체시키는

Page 17: Korean University

방법 . 단점은 중요한 페이지가 오랫동안 프레임을 차지하였다는 이유로 교체되어야 하는

불합리성을 띈다 . 왜냐하면 가장 오래있었던 페이지는 앞으로도 계속 사용될 가능성이 있기

때문이다 .

LRU(Least Recently Used) : 한 프로세스에서 사용되는 각 페이지마다 카운터를 두어

현시점에서 가장 오랫동안 사용되지 않은 페이지를 제거하는 방법 . 오랜기간 참조되지 않은

페이지라면 가까운 시점에서도 사용되지 않을 거라는 가정에 근거한 방법 이다. 단점으로는

불러왔던 시간을 기록해야 하므로 시간 오버헤드가 발생하며 실제로 구현하기 매우 복잡하다.

LFU(Least Frequently Used) : 사용빈도가 가장 적은 페이지 , 즉 호출된 횟수가 가장 적은

페이지를 교체하는 방법으로 단점은 바로 불러온 페이지가 교체될 수 있다 .

NUR(Not Used Recently) : 최근에 사용되지 않은 페이지를 교체하는 방법으로 2 개의 비트를

둔다.

37. 스래싱(trashing)

너무 자주 페이지 교체가 일어나는 현상을 말하는 것으로 어떤 프로세스가 계속적으로 페이지

부재가 발생하여 프로세스의 처리시간보다 페이지 교체시간이 더 많아지는 현상

38. 분산처리의 목적

자원공유 , 연산 속도 향상 , 신뢰성 , 통신

39. TCP UDP차이점

TCP

Page 18: Korean University

- 연결지향형

- 데이터(패킷) 전송시 받는 쪽이 받았다는 표시(Ack)를 보냅니다.

- 이것을 통해 둘이 연결되었고 제대로 전달된다는 것을 아는 것이지요

- 전화연결을 예로 들수 있죠. 두 사람이 같이 통화를 하는것을 전화라고 하죠?

UDP

- 비연결지향형

- 데이터(패킷) 전송시 받는 쪽이 잘 받든 말든 일방적으로 보내기만합니다.

- TV 방송을 예로 들수 있죠. 우리 입장에서는 보기도 하고 TV를 꺼서 못 보기도 하지만 방송국

입장에서는 일방적으로 방송을 내보내고 있지요.

40. TCP 과정

1. 경로 설정 (Route Determination) : 목적지가 로컬인지 리모트인지 결정을 한다.

2. 주소 해석 (Address Resolution): 목적지 IP address에 대한 MAC address를 알아낸다.

41. 포트

하드웨어에서 프로세서가 다른 주변장치와 커뮤니케이션을 할 수 있도록 하는 인터페이스.

42. 세마포어

동시에 프로세스 여러 개가 같은 자료로 접근할 때 발생하는 문제를 해결하기 위해 제안된 개념 .

하나의 프로세스가 하나의 공유 자료에 접근하는 동안 다른 프로세스가 접근하지 못하게

함으로써 ‘ 동기 (synchronization)’ 를 유지하자는 것이다 .

세마포어 s는 정수 값을 갖는 변수로 초기화 및 2개의 연산(P and V, wait and signal)으로만

접근 가능한 특수한 변수.

Page 19: Korean University

43. call by value 와 call by reference ? 각 장단점은?

call by value 는 값을 복사해서 넘기는 것이기 때문에 함수 밖의 변수들과는 무관하다 .

장점 : call by reference 에서와 같은 부작용이 없다

단점 : 부프로그램에서 계산한 결과를 호출하는 측에서 넘겨받을 수 없고 , 실인자의 크기가 매우

큰 경우에는 비효율적

call by reference 는 주소 값을 넘겨주는 것이기 때문에 함수 내에서의 매개변수의 변화는 함수

호출시 넘긴 해당 변수의 값에 영향을 미칩니다 .

장점 : 주어진 인자의 값을 변화시켜야 하는 경우에 유용하게 사용 .

단점 : 프로그래머가 부주의하게 프로그램을 작성한 경우 예기치 않은 부작용 (side-effect) 을

초래하여 프로그램의 신뢰성을 떨어뜨리는 요인

44. 가상메모리 어드레스 맵핑방법

페이지에 의한 매핑, 세그먼트에 의한 매핑

45. 초고속 통신망의 ISDN과 ADSL의 차이점

ISDN은 여러 가지의 서비스(전화, 팩스, 텔렉스 등)를 한 망으로 묶어서 하나의 회선에 여러

단말기를 이용할 수 있는 디지털 망입니다. ISDN의 최고속도는 64kbps입니다.

ADSL은 전화선의 음성 주파수 부분의 상위 주파수를 이용하여 통신하는 것입니다.

고주파를 쓰기 때문에 초기에는 전화국과의 거리에 많은 제약을 받았지만, 지금은 많이

해결되었죠..

ADSL의 최고속도는 하향 8Mbps, 상향 384kbps입니다.

46. CUI(Command User Interface) 와 GUI(Graphic User Interface) 의

Page 20: Korean University

차이?

현재 윈도우즈 기반의 인터페이스가 GUI방식에 해당합니다.

도스모드는 CUI 방식으로 Command User Interface : 명령어 사용자 인터페이스를 뜻합니다 .

즉 , 키보드로 명령어를 입력하여 작업을 하는 방식인데요 . 엄청 불편하죠 .

하지만 GUI 방식의 현재 윈도우즈는 마우스를 이용해서 클릭만 하면 익스플로러를 띄울수도

폴더를 만들수도 삭제할수도 있죠 .

47. C언어의 장점

1.쉬운설계 2.효율성 3.이식성 4.프로그래머 지향적

48. MIPS[million instructions per second] 의 뜻과 왜 성능평가를 위한 적절한

척도가 아닌가?

1초당 100만개 단위의 명령어 연산을 하는 프로세서의 처리 속도로, 컴퓨터이 성능을 나타내는

지표가 된다.

MIPS는 명령어의 종류에 관계없이 1초당 실행되는 명령어 수만 계산하기 때문에 명령어별

특성을 고려하지 않아 그 신뢰성에 의문이 있을 수 있다.

49. 스래싱을 막는 방법?

working set : 실행중인 프로세스가 일정 시간 동안에 참보하는 페이지들의 집합.

working set을 유지해서 프로세스작업을 위한 최소프레임을 보장해 줌으로써 쓰레싱을

막습니다.

50. 트리의 노드수 구하는 공식?

레벨 n까지 모든 노드수는 2 n승 - 1 입니다.

Page 21: Korean University

51. 해싱이란?

해싱 함수를 이용하여 자료를 검색하는 방법. 데이터를 해시 테이블이라는 배열에 저장하고,

해싱 함수를 이용하여 데이터가 위치한 곳의 주소를 찾기 때문에 신속하게 원하는 자료를

검색할 수 있다.

52. 해시테이블?

해싱 함수에 의하여 참조되는 테이블. 데이터를 저장하는 배열로, 보통 하나의 배열에 한 개

이상의 레코드를 수용할 수 있다.

53. 버켓이란? bucket

해싱함수에 의해 계산된 주소인 홈 주소(home address) 혹은 버켓 주소에 레코드 키를

저장하기 위해 마련된 기억장소를 말하며, 대개 한 개 또는 여러 개의 레코드를 저장할 수 있는

슬롯(slot)으로 구성된다.

54. 트리와 이진트리의 차이

트리 : 공백트리가 포함되지 않으며, 비순서 트리

이진트리 : 공백트리가 포함되며, 순서트리

55. C언어 기본 변수

char : 문자열을 저장하기 위한 변수(1바이트)

int : 2,8,10,16진수 정수를 저장하는데 사용되는 변수(4바이트)

float : 부동소수점을 갖는 숫자를 저장하는데 사용되는 변수(4바이트)

double : float의 두배인 8바이트에서 부동 소수점을 갖는 숫자를 저장하는데 사용되는 변수(8

Page 22: Korean University

바이트)

void : 값을 갖지 않는 특수한 데이터를 표현하는 변수

signed : 음수와 양수를 모두 표현하고 싶을때 사용 (int는 기본적으로 양,음수를 표현하므로

필요없다)

unsigned : 음수가 필요하지 않을때 사용. 동일한 데이터형으로 양수를 두배로 표현가능하다

56. 완전그래프에서 edge의 수?

무방향 그래프 : n(n-1)/2

방향 그래프 : n(n-1)

57. type define과 #define?

data type 을 define 해주는 역할이다. 예를 들어 프로그램 중에 unsigned short int 라는

데이터 형을 많이 쓴다고 합시다. 그러면 변수를 할당할 때 마다 unsigned short int a;

unsigned short int b; 이런 식으로 쓸려면 귀찮기도 하고 보기도 거추장스럽다. 그래서 미리

선언을 해 줍니다.

typedef unsigned short int word; 라고 먼저 선언을 해 주면 word 라는 녀석이 unsigned

short int 라는 성질을 가지죠. 그래서 프로그램 도중에 word a; 라고 해주면 a라는 변수는

unsigned short int라는 성질을 가지게 되는 겁니다.

그러면 #define 은?? 이건 선행처리기의 하나로써 (#include, #ifdef 등도 있습니다.) 미리

값을 정해주는 것으로 생각하면 됩니다.

#define OFF 0

Page 23: Korean University

#define ON 1

이렇게 선언을 해주면.. 프로그램 도중에

LED_0 = OFF;

LED_1 = ON;

이라고 했다면 LED_0와 LED_1에는 각각 0과 1이 들어가게 된다.

58. sizeof는 무엇이고 왜 사용하나?(단순히 변수사이즈체크를 묻는것은 아님)

sizeof(인자) 함수는 '인자'가 메모리에 할당된 크기를 byte단위의 값을 리턴해 줍니다.

long int a;

int nSizeA = sizeof(a);

이런식으로 쓰면 nSizeA는 4가 할당되죠

sizeof 는 문자열을 저장할 변수의 실제 크기이고, strlen() 은 변수 안에 실제 저장된 문자열의

길이입니다.

사용하는 이유 : 메모리의 낭비를 줄이고 효율적으로 관리를 하기 위해서입니다. (그럼 그때

입력되는 문장의 길이에 따라서 저장될 공간은 가변적이 됩니다. 그런데 일반적인 char 형

배열을 쓰게되면 C에서 배열의 크기는 고정적이기때문에.. 만약에 입력될 내용의 길이가 얼마나

길어질지 예측할수 없는 상황이라면 초기에 엄청난 크기의 배열을 잡아야 됩니다....

sizeof(char) * 숫자(변수 혹은 상수);

이런 방식으로 가변적인 저장공간을 할당할 수 있는 겁니다..

59. 더블포인터가 무엇이고 응용사례를 말하라.

더블 포인터를 사용하는 이유는 포인터가 가르키는 위치가 변하는 경우입니다.

Page 24: Korean University

예를 들어 트리의 헤더 포인터의 경우 루트 노드를 가르키고 있지요. 근데 만약 삭제 함수에서

루트 노드가 삭제된다면 헤드 포인터는 기존에 가르키고 있던 노드 대신에 다른 노드를

루트노드로 삼아야 합니다.

호출된 함수에서 변경된 값이 계속 값을 유지 하려면 참조에 의한 호출(Call by Reference)

기법을 사용해야 합니다. 즉, 해당 변수의 포인터를 인자로 넘겨주는 것이지요. 헤더 포인터 즉,

포인터 변수의 값을 바꾸어야 하기 때문에 포인터 변수의 포인터, 더블 포인터를 사용하는

것입니다.

60. prinft와 scanf의 차이점

c언어에서 변수값등을 출력하기 위해 사용하는 명령어가 printf이며, 반면에 사용자에게 입력을

받기 위해 사용하는 명령어는 scanf이다.

61. 완전이진트리가 뭔가?

임의의 두 단말 노드의 레벨 차이가 1이하인 경우이며 왼쪽에서 오른쪽으로 채워진 이진 트리

레벨 n까지 모든 노드수는 2 n승 - 1입니다

62. 정적변수(Static Variable)이 뭔가?

일반적 변수와 같은 사용 범위를 갖지만, 함수나 블록의 수행이 끝나면 변수가 사라지는 변수와

달리 프로그램이 종료될 때까지 변수의 값을 보존한다.