우리는 이미 짜여진 데이터 구조와 알고리즘들을 사용하기에 

내가 처음 코딩을 했을 때는 데이터구조와 알고리즘의 필요성을 못 느꼈었다.

많은 사람들이 그럴 테지만, 코딩의 첫 입문을 데이터구조와 알고리즘으로 하는 사람은

당연히 없을 것이다.(재미도 없고, 어렵기 때문에..?)

처음에는 무언가를 만들어 가는 재미로 웹페이지나 어플리케이션 등등을 만드는 것을

공부하며 배웠다.(swift, 파이썬,자바,go,자바스크립트 등등)

그러다가 많은 사람들이 온라인 코딩테스트로 공부를 한다는 것을 

알게 되었는데... 나도 따라 해봤는데... 온라인 코딩테스트는 주로 알고리즘 문제가 많이

나오기 때문에, 어려워서 풀지도 못하고..굳이 이런 것 까지 공부해야하나 싶었다.

 

지금은 C언어를 배우면서 low-level의 프로그래밍을 하다보니까... 이제야 약간 데이터 구조와

알고리즘의 중요성을 깨닫고, 흥미가 생기기 시작한다.

 

데이터 구조(Data Structure)는 결국 메모리를 효율적으로 관리하기 위해서, 프로그래밍을 위한 기초를 다지는 부분이라고 볼 수 있다.

 

알고리즘(Algorithm)은 특정한 목표를 이루기 위해 필요한 과정들을 최적화 한 것이라고 볼 수 있는데, 특히 c언어에서는 데이터관리와 메모리관리 하는 부분의 최적화를 뜻하는 단어이다.  

 

얼핏 보면 정말 복잡하고 어려운 것 같긴 하지만, 하나하나 순차적으로 마치 컴퓨터마냥 c언어마냥 절차지향적으로 생각해보면 그렇게 어려운 것도 아니다. 결국에는 번호를 매겨서 숫자놀이하는 것처럼 숫자를 정렬시키고, 각 숫자에 자신이 필요로 하는 명령어를 넣으면 그것이 결국 프로그래밍의 완성이 되는 것이다.

1. C언어

 

- C언어는 절차지향 언어이다.

- 시스템 프로그래밍이 가능하다.

- 이식성을 갖춘 프로그램을 만들 수 있다.

(프로그래밍계의 에스페란토어!)

- 작고 효율적이다. 

(C로 짜여진 코드는 속도가 빠르고 바이너리 크기가 적다.)

 

** 초보자들에게 어려울 수 있음. 

절차지향적이라 순차적인 처리가 중요함. 

디버깅이 어려워 학습자가 어려워함.

 

 

 

2. Java

- 썬마이크로 시스템즈에서 개발, 현재는 오라클에서 관리 중

- Java는 객체지향 언어이다.

- Java에서는 class 

- 자바 프로그램은 기계어가 아닌, 바이트 코드 파일(class)로 구성 된다. 바이트 코드 파일은 JVM이라는 자바 가상기계의 번역기가 필요하다. JVM 으로 다양한 운영체제에서 독립적으로 사용이 가능하다.

- 메모리 자동정리 

(자바는 메모리(RAM)를 자동관리 하므로, 개발자는 메모리를 관리하는 수고를 덜 수 있다.)

- 라이브러리 풍부 

 

3. Python 

- 가장 대중적인 언어

- 속도가 살짝 느림

- 데이터 사이언스 등 다양한 분야에서 사용된다.

- 메모리 자동정리 

- Python은 객체 지향 언어이다.

- 라이브러리 풍부 (pip install)

 

 

** 객체 지향 언어

** 절차 지향 언어

 

- c언어, 파스칼, 코볼 등 

recursion이란

함수안에서

함수 자기 자신을 호출하는 방법이다.

 

1. RecursionTest

#include <stdio.h>

void RecursionTest(int count)
{
    if (count == 0)    // 종료 조건을 만듦. count가 0이면 다시 RecursionTest 함수를 호출하지 않고 끝냄
        return;

    printf("RecursionTest %d\n", count);

    RecursionTest(--count);    // count를 감소시켜서 다시 RecursionTest에 넣음
}

int main()
{
    RecursionTest(5);    // RecursionTest 함수 호출

    return 0;
}

실행결과 

RecursionTest 5
RecursionTest 4
RecursionTest 3
RecursionTest 2
RecursionTest 1

2. 이건 어케씀?

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void printd(int n);

int main()
{
	printd(231);
}


void printd(int n)
{
	if (n < 0)
	{
		putchar('-');
		n = -n;
	}
	if (n / 10)
	{
		printd(n / 10);
	}
	putchar(n % 10 + '0');
	exit(1);   // 종료조건을 안 넣으면 무한 반복하므로 넣어야 함.
}

실행결과

2

실행결과
-521 넣을시 

-5

 

+ Recent posts