본문 바로가기

컴퓨터공학

(17)
디스크 스케줄링(디스크 구조, 기법) 우선 디스크 스케줄링을 알아보기 전에, 실린더, 플래터, 헤더, 트랙, 섹터 등의 용어들에 대해서 정리하고 가자. 위의 그림이 가장 정확하게 하드 디스크를 설명했다. 모든 플래터에는 헤드가 모두 존재한다. 입력으로 주어지는 것들은 트랙 번호이다. 추가적으로, 하드디스크 구조를 눈으로 보고 싶은 분들을 위해서 유튜브 영상도 하나 링크한다. www.youtube.com/watch?v=NtPc0jI21i0 위의 영상을 보면서, 하드디스크 구조를 확실히 파악할 수 있을 것이다. 디스크 스케줄링은 주어진 트랙 번호들을 찾아가는 과정들을 의미하며, 이동 거리 비교를 통해서 각 상황에서 스케줄링의 우위를 판단하게 된다. FCFS(First Comes First Served) 스택과 동일하게, 선입 선출 구조 들어온 ..
N보다 작은 특정 수의 배수를 찾아보자[최대 공약수, 최소 공배수, 교집합, Ugly Number III] ## 접근방법 간단히 생각해보자, N보다 작은 2의 배수의 개수는 몇 개일까? 정답은, N / 2개이다. N / 2개가 된다는 사실은 자명하므로 증명은 생략하겠다. A와 B가 있을 때, 두 수의 최대 공약수는 얼마일까? GCD(A, B) = GCD(B, A % B)이다. 증명은 아래와 같다. GCD(A, B) = G일 때, GCD(B, A % B)의 최대공약수도 G일까? A = G * a B = G * b A = B * q + r A % B = r = A - B * q B = G * b r = A - B * q = G * a - G * b * q= G(a - bq) 으로 증명될 수 있다. 이제 최소 공배수에 대해서 알아보자, 최소 공배수는 두 수의 곱에다가 최대 공약수를 나눠주면 된다. LCM(A, B)..
이진 탐색 트리에서 전체 방문하는 방법은?(Pre-Order, In-Order, Post-Order, Reverse In-Order) Q. 이진 탐색 트리에서 전체 방문하는 방법은? CS 지식을 묻는 시험에서 자주 나오는 문제이다, 재귀적인 구조를 이해한다면 쉽게 답을 유추할 수 있다. 각 Order의 주체가 되는 것은 루트 노드라는 것을 잊지 않으면 된다. Pre-Order은 루트 -> 왼쪽 서브트리 -> 오른쪽 서브트리 순으로 방문한다. In-Order은 왼쪽 서브트리 -> 루트 -> 오른쪽 서브트리 순으로 방문한다. Post-Order은 왼쪽 서브트리 -> 오른쪽 서브트리 -> 루트 순으로 방문한다. 각 노드의 방문 순서를 출력할 수 있는데, 루트 노드의 위치에 printf를 호출해주면 된다. Q. 부모 노드를 출력하는 것이 모든 노드의 순서를 볼 수 있을까? 어떤 노드든 루트 노드가 될 수 있다. (물론 모든 트리에서 루트 노드..
정렬별 시간복잡도를 생각해보자(Bubble Sort, Selection Sort, Insertion Sort, Quick Sort, Merge Sort, Heap Sort, Time Complexity) Q. 정렬의 종류는 무엇이 있을까? 종류들을 나열하고, 간단하게 알고리즘에 대해서 설명하겠다. 오름 차순 정렬 기준으로 설명하겠다. 버블정렬 : 순차적으로 근접한 두 값을 비교하면서, 마지막에 거품(Bubble)처럼 하나의 값을 얻게 된다. 같은 과정으로 하나의 값들을 얻어보면 정렬할 수 있다. 선택정렬 : 선택정렬은 전체의 원소에서 가장 작은 값을 순차적으로 찾아가면서 정렬한다. 삽입정렬 : K번째 원소의 위치를 찾을 때, 1부터 K-1까지는 모두 정렬이 되어 있으므로, K -1번째부터 값을 비교하며 위치를 찾으면서 정렬한다. 퀵정렬 : 피벗을 선택하고, 피벗을 기준으로 왼쪽에는 피벗보다 작은 값이 오른쪽에는 피벗보다 큰 값이 오도록 한다. 재귀적으로 호출하며 모든 원소들을 정렬한다. 합병정렬 : 재귀..
CPU 스케줄링(gantt chart) CPU 스케줄링을 gantt chart로 계산해보자. Q. FCFS인 경우 평균 시간을 어떻게 될까? FCFS의 경우, 순차적으로 프로세스가 실행되므로 평균 시간은 각 프로세스의 시작 시간과 같다. 간단히 직관적으로 이해될 것이다. Q. 라운도 로빈(RR)의 경우 평균 시간은 어떻게 될까? 위의 그림을 이해해보자, P2는 4초에 시작하고 7초에 모두 마무리된다. P3도 7초에 시작해서 10초에 마무리된다. 하지만 P1은 0 ~ 4초까지 실행이 되고, 10초에 다시 시작되므로 대기시간이 (10 - 4)가 존재한다. 따라서 (P1의 대기시간 + P2의 대기시간 + P3의 대기 시간) / 3을 한 값이 평균 대기 시간이 된다. 다양한 CPU 프로세스 알고리즘이 존재한다. 어떤 방식이든 평균 대기 시간이라는 것..
데이터베이스 JOIN의 종류(SQL) Q. JOIN 명령어는 왜 필요한 것일까? 두 개의 테이블이 있을 때, 한 테이블에 대한 쿼리로만으로 원하는 결과값을 얻을 수 없을 때 사용해야 한다. JOIN을 통해서, 두 테이블을 새로운 하나의 테이블로 만들고 쿼리를 통해서 원하는 결과값을 얻어낸다. Q. JOIN의 종류는 무엇이 있을까?
힙 트리란 무엇일까(Max, Min Heap Tree) Q. 힙 트리의 정의는 어떻게 되어있을까? Max Heap Tree의 경우, 모든 부모노드는 자식 노드보다 커야 한다. 따라서, 루트 노드는 모든 노드들보다 큰 상황이다. 반정렬상태를 유지한다고 표현하기도 한다. 힙 트리는 또한 항상 Complete Binary Tree 형태를 이룬다. Binary의 의미는 자식 노드가 2개임을 의미한다. Complete는 트리의 높이가 H일 때, 전체 자식 노드의 개수는 2^(H - 1)보다 같거나 크고, 2^H - 1보다 같거나 작은 것을 의미한다. 따라서 어떤 탐색이든 O(logH)만에 가능하다고 표현하기도 한다. Q. 힙 트리는 어떻게 구현할까? 어떤 부모노드의 인덱스가 i라고 하면, 왼쪽 자식 노드는 2 * i, 오른쪽 자식 노드는 2 * i + 1라고 표현할 ..
네트워크에 서브넷 마스크란 무엇일까?(What, Why) 구글에 서브넷 마스크에 대해서 검색해보니 영 시원치 않아서 직접 작성하게 됐다. Q. 서브넷 마스크란 왜 필요한 것일까? 2개의 패킷을 확인한다고 가정해보자. 2개의 패킷에 대해서 출발지를 확인해보니, 1번 패킷은 출발지가 192.168.0.1 2번 패킷은 출발지가 192.168.0.129 목적지는 모두 192.168.0.10으로 같다고 생각해보자. 네트워크 구성을 생각해보면, 호스트들은 L2 스위치에 연결되며, L2 스위치들은 게이트웨이로 L3 스위치의 IP를 바라보게 된다. 목적지인 192.168.0.10은 판단을 해야 한다. 해당 패킷이 자신과 같은 네트워크인지 혹은 다른 네트워크라면 게이트웨이로 전송해서, 라우팅을 이용해 목적지를 찾도록 해야한다. 네트워크 실무를 접해보지 않은 분이라면 이해가 쉽..