📈알고리즘/알고리즘 30

퀵정렬 이해하기

퀵정렬 함수 과정(수도 코드) (※ p , left, right는 value 값이 아니라 index 값을 의미한다.) 1. 임의의 index 값인 p(pivot)를 지정. 2. [left] (맨 왼쪽 값, [0]이 아니라, 범위의 제일 왼쪽값 ex) 5~11 일 경우 [5]가 [left]) [left]와 [p] 자리를 변경. 2-1. p가 left 라면 그대로 자리를 유지한다. 3. [p] 를 제외한 나머지 값들을 p의 value를 기준으로 값 비교 후, 위치 이동 [(p보다 작은 무리), (p보다 큰 무리)] 4. [p]가 바꾸기 이전의, [left] 값과 다시 자리를 바꾸는게 아니라...... 무조건 p를 p보다 작은 무리의 가장 오른쪽에 위치한 값과 자리를 바꾼다. 4-1. p보다 큰 값들만 있다면..

자료구와 알고리즘 학습시작.

솔직히 코드 복붙 누가 못하냐? 개발자는 개발해야 된다. 알고리즘 코드들 보면서 익숙해져야된다. 그 어려운 소스코드들 보기엔 니가 실력이 후달리고. 100문제 가까이 기초문제 풀면서 적응을 했으니 좀 더 모아놓은 자료구조, 알고리즘들 소스 분석들을 읽고 분석하자. 글을 쓸려면 니가 많이 읽어봐야되는데 아직 긴 코드 분석할 능력이 안된다. 자료구조, 알고리즘 공부하면서 니가 익혀야된다. 하나씩 하나씩. 골방에 틀어박혀서 읽어야 된다. 방법론. 어떻게 공부할 것인가? 얘기 들어보니 구현이 중요하기 보단, 원리를 이해하는게 더 중요하다. 1. 관련 이론을 이해한다. 2. 그 코드를 분석해본다. -> 알고리즘은 학교수업에 맡기고 우선 자료구조들부터 다시 해보자. 1,2 번은 매일 1개씩 해본다. 3. 코테 문제..

병합 정렬[분할 정복 알고리즘 + 재귀 정렬]

병합 정렬 기본 슈도 코드(분할 정복 알고리즘 + 재귀 정렬) MergeSort(A,p,q) 입력: A[p]~A[q] 출력: 정렬된 A[p]~A[q] if( p < q) { // 배열의 원소의 수가 2개 이상이면 k = ⌊ (p+q)/2 ⌋ // k=반으로 나누기 위한 중간 원소의 인덱스 MergeSort(A,p,k) // 앞부분 순환 호출 MergeSort(A,k+1,q) // 뒷부분 순환 호출 A[p]~A[k]와 A[k+1]~a[q]를 합병한다. } 입력 크기 n =8인 배열A에 대한 병합정렬(분할 정복 알고리즘 + 재귀 알고리즘) 수행과정(슈도 코드) 처음에 왜 가장 작은 배열에서 if조건이 성립되지 않으면 저절로 합병되지 않는가 이해하기가 힘들었다. 저렇게 { }와 들여쓰기로 정리를 통해 천천히 ..

1주차 공부 과정

알고리즘 강의는 c언어든, 자바든 언어는 상관없이 이론을 배우는 시간인듯 싶다. 자료구조를 선수구조라고 얘기해놨지만... 선수구조라기 보다는 그것들을 다시 처음부터 공부하면서 알고리즘을 새롭게 배우는 듯하다. 내가 js로 프로그래머스 풀면서 나온 문제들이 나와서 반가운데 그걸 예시로 잘 풀어서 설명해주시니 좋았다. 그래서 왜 복잡도가 그런지 이해하는 시간이었다. 난 js를 통해 테크트리를 올렸기 때문에 js를 통해 알고리즘을 이해하고자 애써보려고 한다. 순차탐색(Sequential Search): 주어진 순서에 따라 차례로 탐색 이진탐색(Binary Search): 정렬된 항목들에 대해서 중간에 있는 항목을 비교하여 그 결과에 따라 같으면 탐색을 마치고, 다르면 작은 항목들이 있는 부분 또는 큰 항목들이..

C언어 공부(3)[동적 메모리 할당]

동적 메모리할당 malloc 함수 동적으로 따로 사용자가 메모리를 받는 것이라, 컴퓨터는 사용자의 의도를 알지 못함으로 그 공간의 자료형을 정의하기 어렵다. 동적할당의 단점은 공간을 늘려줌으로서 array를 키웠을 때, 기존의 array는 가비지 값으로서 없어지지 않고 메모리를 떠돌게 된다. 동적할당 선언 (4x4 = 16byte 공간 선언) 공간이 부족하여 tmp라는 추가의 동적할당 공간을 선언하고, array와 tmp를 서로 이어줌으로서 array가 추가적인 공간 사용이 가능해졌음을 알 수 있다. 출력결과 위처럼 배열을 포인터, 동적할당 선언이 아닌, 기존 배열선언처럼 한다면 배열키우기 array = tmp 사용 불가. 왜냐하면 배열에서 배열의 이름은 주소값을 저장만 하지, 바꿔주는 것은 불가능하기 ..

C언어 자료구조[함수 포인터]

함수 포인터 선언하기 우리는 이제까지 어떤 변수를 가리키는 포인터, 배열을 가리키는 포인터를 사용해보았어요. 물론 이정도를 알아도 상당히 훌륭하다고 생각합니다. 그렇지만 변수뿐만 아니라 함수도 포인터로 가리킬 수 있다는 것을 알게 된다면 조금 더 간지나는 프로그래밍을 시도해 볼 수 있겠습니다. 이제부터 설명할 것이 무엇이냐, 그 이름하여 함수포인터랍니다. 함수포인터라... 그냥 포인터도 극혐인데 말이죠 함수포인터란 함수를 가리킬 수 있는 포인터를 의미합니다. 아니, 근데 그러면 주소를 알아야하는데, 함수에도 주소가 있나? 네, 있습니다. 1. test 라는 함수를 만든다. 2.main에 int test(int a) 가져와서 함수 포인터 형만 남긴다. 3. 함수 명을 (*)을 추가하여 함수 포인터를 선언하..

C언어 공부(2)[문자열 제어, 구조체]

c언어에서의 Null 값 : \0 c에서는 문자열 뒤에 \0이라는 null 값을 마지막에 붙이는게 규칙. gets() 통해 하나씩 배열 안에 다가 값을 집어 넣을 수 있다. string.h 라이브러리를 통해 문자열 관련 메서드를 사용가능. 아래처럼 words라는 배열안에 각 길이가 다른 문자열들을 저장할 수 있게됨. srtlen(문자열)은 문자열의 길이를 출력해주는 메서드. strcmp(문자열1, 문자열2)는 두 문자열을 비교. 왼쪽 값이 사전적으로 더 앞에 있다면 -1, 같다면 0, 오른 쪽 값이 더 사전적으로 앞이라면 1을 출력. 참고로 숫자를 출력하기 때문에 %d를 사용해서 출력했다. 왼쪽이 더 빠르니 -1이 출력된다. 문자열 복사 strcpy(복붙할 문자열, 복사당할 문자열) 포인터를 배열안에서 ..

C언어 공부(1)[라이브러리 math, limit 및 배열, 재귀함수, 포인터]

return 0는 int main(void){} 라는 메인 함수가 int형으로 반환할 것을 약속해놓았기 때문에 main의 return값으로 0을 줘서 프로그램을 종료함을 의미한다. sizeof()는 변수가 메모리에서 차지하는 공간을 출력해준다. overflow 특정변수가 커버할 수 있는 범위를 넘었을 때 생기는 오류 double x = pow( 지수 ,거듭제곱 횟수) c언어에서의 반복문 사용시, 먼저 변수 선언을 한 뒤에 반복문을 사용해줘야 함. for(int i =0; n

C언어 기초정리(입력, 출력, 함수구조)

dev c++ 프로그램 사용. 컴파일 단축키 f9 컴파일 된 파일 실행 f10 f11 : f9와 f10 한번에 실행 오랜만이다... printf 조차 낯설다. C언어는 작은 따옴표는 한글자만, 쌍 따옴표는 문자열에 사용. 한글은 2byte씩, 영어는 1byte씩 잡아먹는다. 함수구조 3가지 1. 2. 3. 코드 작성. 함수 원형 따로, 함수 사용자 정의 따로(세미콜론 없음), 함수를 main에서 사용 1 2 3 4 5 6 7 8 9 10 11 12 #include void input_num(int n); // 함수 원형 void input_num(int n){ // 함수 사용자 정의 printf("입력된 숫자는 %d입니다.\n",n); // 뒤에 받아줄 n 값 선언 } main(){ printf("안녕\..

다시 공부하는 c언어

C언어가 이제 크게 기술적으로 현장에서 사용되지 않고, 쓸 때 없이 돌아가고, 퍼포먼스가 적은 관계로 공부를 권하지 않는 선배 개발자님들이 많았다. 하지만 어쩌겠는가... 대학교를 다니고 있고, 알고리즘을 C언어로 공부한다는데ㅠ 내가 바꾸자! 하고 할 수도 없는 노릇. 우선 c언어 설치부터 난관ㅋㅋㅋ 1. visual studio code 2. visual studio 3. dev c++ 셋 중에서 가장 쉽고 간단한 dev c++로 c언어를 다시 시작했다. c언어 다 공부도 했는데... 다 아는 거 아냐 싶다가도 프로그래머스 기초문제의 쉬운 것도 못푸는거 보고.. 아 다시 해야겠구나 싶었다. c언어를 못알아 먹는데 어떻게 선수지식인 자료구조를 공부할 것이며, 거기서 더 나아가 알고리즘 수업을 들을 수 있..