반응형

프로그래밍 215

파이썬 설치와 HelloWorld

그 동안 win32api에 빠져 있느냐 파이썬을 소홀히 했네요. 최근에는 워낙 다양한 언어와 다양한 개발방법이 있고, 예전보다 하드웨어의 성능이 워낙 좋아져서, 완성도 있고 빠른 개발이 빠른 성능보다 더 중요한 위치를 차지하게 되었습니다. 이제 개발 언어는 워낙 다양해지고, 프로그래머들 간 프로그래밍 언어 선호도가 다르기 때문에, 어떤 언어가 좋다 말할 순 없죠. 또 특정 분야에 특화된 언어가 있기 마련이긴 하지만, 하나의 언어가 전체를 아우를 수 없는 시대가 왔습니다. 결국 하나의 언어로는 먹고 살기 힘들죠? ㅎㅎ 아무튼 파이썬을 공부할수록 파이썬은 참 기능이 많은 언어라 생각합니다. 그리고 문법도 직관적이기 때문에, 배우기 쉽다고도 합니다. 근데 배우기 쉽다는 부분은 개인적으로는 동의하지 않습니다. ..

자료구조 – 이중 연결리스트[doubly linked list] C언어

이중 연결리스트는 단순 연결리스트 자료구조를 확장한 형태이다. 단순 연결리스트를 정확히 이해했다면, 이중 연결리스트에 대한 구조 또한 쉽게 이해할 수 있다. 2014/03/20 - [프로그래밍/C언어] - 자료구조 - 연결리스트[linked list] C언어 왼편(단순연결리스트), 오른편(이중연결리스트)의 차이는 prev의 유무다. prev의 역할은 next와 비슷한데 next가 다음 노드(NODE)를 참조하는 것에 반해 prev는 이전 노드(NODE)를 참조한다. 이런 구조적인 차이로 인해 알고리즘도 약간의 변화가 생기게 된다. 단순 연결 리스트의 삽입, 삭제와 이중 연결 리스트의 삽입, 삭제에 대한 비교를 하면 쉽게 이해할 수 있다. 위 그림은 단순 연결리스트의 메모리의 구조를 모식적으로 나타낸 것이..

헤더파일에 static 선언을 하면 안 되는 이유

'먼저 헤더파일에는 함수 선언하여라' 라고 권하고 싶다. 이유는 혼동이 될 수 있는 함수와 변수의 차이 때문이다. 함수는 기본적으로 extern이다. void func(); 와 int a; 는 근본적으로 다른 선언이다.(C는 조건부,C++에서는 무조건 다름) void func()는 func()가 어딘가에 있어! 라고 말해주는 표시등이고, int a라 선언하면 데이터 영역에 a가 쓰여진다. 이런 차이로 프로그램에서 전역으로 선언된 a가 있는 헤더파일이 불려지는 횟수 만큼 초기화가 일어난다. 결국 스택이 아닌 정적영역에서 이름이 충돌하므로 에러가 생긴다. 헤더파일에 변수를 extern으로 선언하면? a.h에 extern int a; 와 b.h에 extern int b;가 선언되어있고, 각 cpp 파일에 변수..

전역 변수를 지역변수로 만들면? (static과 extern에 대한 이야기)

전역 변수를 지역적으로 만들면? 간단할 것 같은 위 물음에 답을 찾으려면 생각보다 많은 것에 대해 알고 있어야 한다. 긴 여정을 시작해 보자. 2015/06/18 - [프로그래밍/C언어] - 지역변수와 전역변수와 정적변수[static, extern, auto, register] 번역단위 전역 변수를 지역 변수으로 만들면 통용 범위가 모듈단위로 줄어든다. 모듈의 의미는 여러가지나 여기서 말하는 모듈이라 함은 하나의 cpp파일과 이 cpp파일이 포함하는 헤더파일(*.h)파일을 말한다. 이는 컴파일러가 컴파일을 하는 번역 단위다.(번역단위란, 하나의 목적파일(*.o)을 만드는데 필요한 소스파일을 말한다.) (참고 : a.cpp, a.h, main,cpp 가있고 a.cpp와 main.cpp는 각각 a.h를 in..

지역변수와 전역변수와 정적변수[static, extern, auto, register]

지역변수와 전역변수의 관계는 단순하지만 이해하지 못하면 난항을 겪게 되는 부분이다. 한번쯤 확실하게 정리해 둘 필요가 있는 파트다. 여기서는 일반적으로register사용빈도는 낮으므로 선택과 집중이라는 측면에서 register에 대한 내용은 다루지 않을 예정이다. 2015/06/20 - [프로그래밍/C언어] - 헤더파일에 static 선언을 하면 안 되는 이유 정적변수(static)는 지역변수(auto)와 전역변수(extern)를 짬뽕해 놓은 것이다. 지역변수와 정적변수는 확실히 구별되기 때문에 이 둘을 먼저 설명하는 것이 순서상 바람직하다 생각한다. 지역변수(auto)와 전역변수(extern) 지역변수는 우리가 흔히 main()함수 내에서 선언하는 모든 변수, 또는 사용자 함수 내부에서 선언하는(인수포..

파이썬(python) 강좌를 시작하며

파이썬(python)에 대한 자료를 찾는 중 C나 C++ 문법과 비교를 한 자료가 없는 듯 하여, 필자 본인이 파이썬(python)과 C/C++을 비교해 나가며 정리하려 합니다. 나의 베이스 언어는? 우선 시작에 앞서 식상한 이야기지만 모든 언어의 기본은 C/C++이라고 생각하며, 그 생각은 변함이 없습니다. 자신의 기본 베이스 언어를 무엇으로 택하는가 결정하는 것은 중요합니다. 저는 C를 감히 추천 드립니다. C/C++을 추천하는 이유는 다음과 같습니다. 처음 배우기는 어렵지만, C를 어느 정도 다룰 줄 알면 다른 언어들을 쉽게 이해할 수 있고, 빠른 시간 내에 익힐 수 있다. 하지만, 취미로 택한다면 베이스로 python의 선택도 나쁘지 않다고 생각합니다. C언어/C++언어의 기본 문법을 익히는 데는..

다익스트라 알고리즘(Dijkstra Algorithm)최단경로 알고리즘

다익스트라 알고리즘에 대한 글을 쓴지 2년이 지났네요. 그동안 이 알고리즘을 사용할 일은 없었습니다. 그리고 최근 제가 쓴 글을 다시 보는 순간 나의 글이 너무 나도 허접해 보였습니다. 공부를 해갈수록 "아는 만큼 보인다" 라는 말이 뼈속 깊이 느껴지네요. 그 당시에 제가 쓴 글은 제 머리 속 생각만 쓰기 급급했습니다. 그래서 비록 아직도 한참 모자라지만, 다익스트라 알고리즘의 핵심을 재해석 해보려 합니다. 다익스타라 알고리즘 이 알고리즘의 핵심은 토탈 가중치에 있습니다. 사실 토탈 가중치는 가중치와 같은 의미로도 쓰이지만, 토탈 가중치는 최초 시작점으로 부터의 가중치라는 뜻입니다. 어떤 사람이 A의 위치에 있고 갈 수 있는 경로가 A->B->C->D 라고 하면 각각의 경로는 가중치가 있습니다. 가중치는..

2차원배열 동적할당

2차원 배열의 동적할당은 1차원 배열의 동적할당과 달리 생각해야 할 부분이 있다. 단순히 방법만 알아도 사용하는데 지장은 없지만, 복잡한 알고리즘내에서 계산을 하다 보면, 왜 기본이 중요한지 느끼게 된다. 그래서 기본을 설명하려 한다. 사전필요지식 2014/02/11 - [프로그래밍/C언어] - 이중포인터에 대한 이해 C언어 2013/11/28 - [프로그래밍/C언어] - C언어 포인터에 대한 이해(1) 2014/01/12 - [프로그래밍/C언어] - C언어 포인터에 대한 이해(2) 2014/01/13 - [프로그래밍/C언어] - C언어 포인터에 대한 이해(3) 2014/02/28 - [프로그래밍/C언어] - 동적배열 자료구조의 시작 먼저 1차원 배열과 2차원 배열의 정적할당을 할 경우의 메모리내에서는 ..

미로찾기 알고리즘(recursive)-재귀

미로찾기 알고리즘의 종류는 여러가지가 있다. 이 글은 그 중에서 가장 기본이 되는 재귀(recursive) 알고리즘에 관한 글이다. 재귀의 특징은 직관적으로 알아보기 쉽다는 이점이 있다. 재귀는 Stack을 사용하기 때문에 깊이가 깊어지면 overflow 에러가 날 가능성이 높아진다. 하지만, 간단한 문제에 대해서는 재귀의 유혹을 뿌리치기 힘들다. 이전에 알아봤던 깊이 우선 탐색은 미로찾기 알고리즘(재귀)의 원형이 된다. 2014/02/26 - [프로그래밍/알고리즘] - 하노이탑 재귀호출 알고리즘 2013/06/05 - [프로그래밍/알고리즘] - 탐색-깊이우선탐색, 너비우선탐색 오래전 포스팅한 내용이라... 예를 들어보면. 위와같은 길이 있다고 하자. 1.어두운 블럭은 벽으로 막혀 있다고 가정하고, 하얀..

반응형