본문 바로가기

취업과 기본기 튼튼/빽 투더 기본기

(38)
빽 투더 기본기 [알고&자구 2편]. 자료구조 기초 기초 자료구조에 대해서 정리해 놓는다. 그닥 내용은 없지만, 그냥 한번 훑어보는 정도. 자료구조 개요 어떤 자료구조를 안다함은, 다음을 안다는 것이다. 정의 특징 / 특이사항 접근 시간 사용 상황 구분 위 자료구조들은 기초적인 것으로, 굳이 여기에 다 적진 않는다. 트리 좀 더 자세히 알아보고 싶은 것은 비선형구조의 트리다. 선형 구조와 다르게, 비선형 구조는 구조 특성상 여러 형태로 응용되기 때문에, 좀 더 알 필요가 있다. 정의 트리의 정의는 다음과 같다고 한다. 트리는 하나의 루트 노드를 갖는다. 루트 노드는 0개 이상의 자식 노드를 갖고 있다. 그 자식 노드 또한 0개 이상의 자식 노드를 갖고 있고, 이는 반복적으로 정의된다. 트리는 DAG(Directed Acyclic Graphs, 방향성이 있..
빽 투더 기본기 [알고&자구 1편]. 정렬 기본 정렬에 대해서 정리해 놓는다. 그냥 나 알아보기 쉽게, 직관적으로만 설명한다. 시간 복잡도 O(n^2) 정렬 선택 정렬 뒤에 가장 큰, 또는 가장 작은 값을 현재 인덱스 뒤부터 찾아, 앞의 인덱스부터 하나씩 채워나가는 정렬. # selection sort a = [3,1,2,5,4,6,7] size = len(a) for i in range(size): for j in range(i+1, size): if a[j] < a[i]: a[i], a[j] = a[j], a[i] print(a) 버블 정렬 뒤에 가장 큰, 또는 가장 작은 값을 뒤로 밀어밀어 보내, 마지막 인덱스부터 하나씩 채워나가는 정렬 # bubble sort a = [3,1,2,5,4,6,7] size = len(a) for i in r..
재귀적으로 문제 해결하기 (1) 재귀적으로 문제 해결하기(1) 재귀적으로 문제 해결하기.재귀적으로 문제를 푼다는 것은 무엇일까? 가장 대표적인 예인 피보나치 문제를 떠올려보자.피보나치 수열f(n+2) = f(n) + f(n+1) 를 만족하는 수열을 피보나치 수열이라고 한다. 수로 표현하면1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... 과 같다.n을 입력받아 n번째 피보나치 수를 구하여라.이 문제를 아래와 같이 푼다면 재귀적으로 푼 것이다.long long fibo(int n){ if ( n == 1 || n == 2 ) return 1; else return fibo(n - 1) + fibo(n - 2); }쉽게말해, 함수 내에서 호출된 함수를 또 호출하는 것이 재귀이다.탈출조건이 있어야 한다.( 여기에선 n == ..
큐 구현하기 만약에, 면접장에서 큐를 구현해보라는 말을 들으면 어떻게 해야할까? 이런 기본적인 자료구조를 바로 짜보라는 질문에 대비하여, 지금 다시 한번 복습해보자. 1. 배열로 구현하기 기본 자료구조를 먼저 정의해보자. 배열을 이용하여 queue의 사이즈를 정하여 선언한다. head, tail 그리고 queue의 현재사이즈를 담는 선언한다. #define QUEUE_CAPACITY 8 int queue[QUEUE_CAPACITY]; int head = 0; int tail = -1; int queue_size = 0; 이제 큐에 원소를 삽입, 삭제하는 함수를 짜보자. void enqueue(int n){ if ( queue_size == QUEUE_CAPACITY ){ printf("queue is full! \n..
연결리스트 구현하기 자료구조를 공부해본 사람은 누구나 연결리스트가 뭔지 알 것이다. 이를 복습차, 코드로 다시 구현해보자.1. 노드 정의먼저 연결리스트의 각 노드의 구조체를 정의해보자. 이는 교과서 처럼 다음과 같다.struct _node{ int key; struct _node *next; } note_t; typedef struct _node node_t;여기서는 int 라고 했는데, int 가 아니여도 좋다. 저 구조체 안에 추가적으로 넣고 싶은 변수를 더 넣어도 된다.next 라는 포인터를 통해 다음 노드와 연결된다.2. 노드 삽입연결리스트에 노드를 삽입한다는 것은 일반적으로 리스트 끝 노드에 노드를 추가하는 것이다.연결리스트는 또한 일반적으로 리스트 앞부분을 가리키는 포인터인 head와 끝을 가리키는 포인터인 ta..
팩토리얼 계산하기 1 * 2 * .. * n 과 같은 꼴을 팩토리얼이라 하고, 기호로 n! 이라고 한다. 예를 들면, 1 * 2 * 3 = 3! 이다. 일반적으로 팩토리얼을 구하는 방법은 다음 두 가지 방법이 있다. 1. 반복문으로 구하기 int factorial(int n){ int r, i; r = 1; for (i = 2 ; i