반응형

프로그래밍 219

파이썬(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.어두운 블럭은 벽으로 막혀 있다고 가정하고, 하얀..

자료구조 -트리(Tree) C언어

트리의 특징 2차원적 구조를 가짐. 이에 반해 자료구조 배열, 연결리스트, 스택, 큐...등은 1차원 선형적 구조를 갖음. 2014/02/28 - [프로그래밍/C언어] - 동적배열 자료구조의 시작 2014/03/20 - [프로그래밍/C언어] - 자료구조 - 연결리스트[linked list] C언어 2014/03/21 - [프로그래밍/C언어] - 자료구조 스택(stack) C언어 2014/03/22 - [프로그래밍/C언어] - 자료구조 큐(Queue) C언어 용어정리 차수 - 자식 노드의 개수 잎 - 자식 노드가 0인 노드 서브트리(sub Tree) - 트리 내부의 작은 트리 포리스트(Forest) - 트리가 여러 개 모인 것. 레벨(level) - 루트에서 그 노드까지의 거리를 말함.(루트레벨 :1) 높..

부모클래스의 멤버변수 초기화

자식 클래스에서 부모의 멤버변수를 초기화하여 사용하고 싶을 경우는 멤버 초기화리스트(멤버이니셜라이져)의 사용이 필수다. 초기화하는 방법에 앞서, 상속에 관한 이해가 필요하다. 클래스는 그 클래스의 속성을 표현하는 데이터들의 집합이다. 함수는 그 데이타에 대한 작업을 하는 도구다. 클래스의 객체를 생성하여 객체가 차지하는 메모리 공간의 크기를 재보면 멤버변수의 사이즈의 합과 같다. 함수가 얼마나 많든지 간에 객체의 크기는 멤버변수만의 총 사이즈다. 2015/04/28 - [프로그래밍/c++] - [C++]멤버이니셜라이져(멤버초기화리스트) 다음은 부모클래스와 상속관계에 있는 클래스의 객체를 생성하여 그 크기를 출력하는 코드다. 너무 당연한 결과다. circle의 멤버변수는 int형 num 하나로 4byte,..

프로그래밍/cpp 2015.04.29

[C++]멤버이니셜라이져(멤버초기화리스트)

멤버 초기화 리스트(Mmber Initialization List)라고한다. 생성자의 역할인 멤버변수의 초기화를 대신할 수 있다. 보통 멤버 이니셜라이져라고 부르는데 꼭 사용해야 하는 경우는 4가지가 있다. 1. 상수 멤버의 초기화 (C++11의 경우는 상수멤버변수 선언과 동시에 그냥 초기할 수 있음.) 2. 레퍼런스 멤버 초기화 3. 객체멤버의 초기화 4. 부모클래스의 멤버변수초기화 1, 2, 3번은 비슷한 맥락에서 이해될 수 있다. 4번의 경우는 상속과 객체생성 메커니즘에 대해 잘 이해해야 이해할 수 있다. 2015/04/29 - [프로그래밍/c++] - 부모클래스의 멤버변수 초기화 멤버이니셜라이져 문법 아래는 일반적인 멤버 초기화 방법이다. 아래는 멤버 이니셜라이저 문법을 사용하였다. 두 경우 결과..

프로그래밍/cpp 2015.04.28

[C++11]바인더, std::bind, std::function, std::spaceholder::_1, bind1st, bind2st

바인더는 STL 함수 어댑터다. std::bind는 C++11에서 표준으로 제공하는 바인더로 기존의 bind1st, bind2st 보다 다양한 활용을 할 수 있는 어댑터다. 기존의 bind1st, bind2st는 두 개의 파라미터를 갖는 객체함수의 파라미터를 고정시켜 주는데, bind1st는 첫 번째 파라미터를 bind2st는 두 번째 파라미터에 고정값을 준다. 일반적으로 bind1st와 bind2st는 STL 이항 함수자(함수객체)를 단항으로 바꾸는데 쓰인다. 다시말해 들어 비교를 하는 STL 함수 객체(함수자) equal_to, not_equal_to, less, greater,.....등을 단항함수로 만든다. 위 코드를 분석해보자. bind1st는 이항함수자를 단항함수자로 만들어 반환한다. bind..

프로그래밍/cpp 2015.04.25

[c언어] 홀수 마방진 풀이법(알고리즘)

마방진의 풀이 여러가지가 있다. 대표적인 풀이방법은 홀수차와 짝수차에 따라 다르고 짝수차는 4의 배수와 아닌 수에 따라 달라진다. 예를들어 3차 마방진은 3x3의 정방행렬형태다. 가장 간단한 형태는 홀수 마방진이고, 짝수차 중 4의 배수가 아닌 마방진 형태가 가장 복잡하다. 여기서는 간단히 홀수 마방진을 푸는 방법과 알고리즘을 c언어로 작성해 보겠다. 마방진의 정의 우리에게 친숙한 김홍도의 작품 씨름이다. 이 그림에는 마방진의 원리가 숨어있다. x자 마방진이라고 하는 이 마방진은 대각선에 늘어선 사람의 합이 12명이 된다. 우리가 흔히 말하는 마방진은 규격은 다음과 같다. N차 마방진의 경우 1부터 NxN까지의 자연수를 NxN칸에 나열 했을 경우 가로와 세로 대각선의 어느 방향으로도 수의 합이 같아야 한..

메모리 구조,c언어를 이해하기 위한(텍스트,데이타,bss,힙,스택)

C언어를 잘하고 싶다면 메모리 구조에 대한 이해는 꼭 필요합니다. 물론 다른 언어도 마찬가지지만 메모리에 대한 조작이 비교적 많은 C언어는 메모리 구조는 바로 언어에 대한 이해도를 높여줍니다. C언어로 짠 프로그램이 메모리에 어떻게 로드 되는지 알아보겠습니다. 다음 코드는 주의 깊게 안보셔도 됩니다. 완전 쓸데없는 노가다입니다. 흑 ㅠ 코드를 분석할 필요는 없고, 결과를 보려고 만든 코드니 결과만 알면 됩니다. 변수들의 선언 방식과 위치에 따라서 주소값이 어떤 규칙성이 보일 듯 하죠? 4로 시작하는 주소가 많고, 2,6으로 시작하는 주소도 보이네요. 대충 3개 정도로 나뉘어 보입니다. 실제로는 5개의 영역입니다. 일반적으로 텍스트 영역이 낮은 주소-> 스택영역으로 갈수록 높은주소, 스택을 제외한 나머지 ..

반응형