본문 바로가기

반응형

프로그래밍

(30)
[C] 1. C 언어의 시작 1. C Language1972년에 처음 등장한 C언어는 Bell 연구소와 Dennis Ritchie에 의해 개발된 컴퓨터 언어이다. C언어는 UNIX 시스템을 재구성할 목적으로 개발되었으며, Ken Thompson이 개발한 B언어를 기초로 개발되었다. 이후로 높은 이식성을 바탕으로 널리 사용되게 되었으며, C언어의 사용자가 많아지자 다양한 Customizing도 발생했다. 이에 ANSI는 C언어를 표준화했고, 표준화된 C언어를 통해서 많은 개발이 진행되었다. 현재는 C99 표준화를 지나 2007년에 개정된 C11을 주로 사용하고 있다.- C언어의 장점1) 높은 이식성을 가진다. 하나의 컴퓨터에서 개발된 C 프로그램은 변경없이 다른 컴퓨터에서도 대부분 실행할 수 있다. 대부분의 시스템/언어들이 C를 기반..
[알고리즘] 1_3. 선택 정렬(Selection Sort) 1. 정의선택 정렬(Selection Sort)이란, 현재 선택된 데이터 이후의 정렬 되지 않은 데이터 중에서 가장 작은(혹은 가장 큰) 데이터를 선택해 현재의 데이터와 위치를 교환하는 방식으로 정렬되는 방식이다. 2. 설명PASS 1우선 가장 앞의 데이터가 선택되게 된다. 그리고 그 데이터 이후를 탐색해 가장 작은 데이터를 찾는다. 최소 값의 데이터를 찾았다면, 두 데이터의 위치를 교환해준다. 예시의 데이터에서는 4 와 1 의 위치를 교환해주게 된다. PASS 2두 번째에서는, 2 가 선택되게 된다. 선택된 이후의 데이터에서 2 보다 작은 값은 존재하지 않으므로, SWAP 과정이 존재하지 않고 완료될 것이다. PASS 3PASS 3에서도 PASS 1, PASS 2와 동일한 방법을 시행한다. PASS 4..
[알고리즘] 1_2. 버블정렬(Bubble Sort) 1. 정의 버블 정렬(Bubble Sort)은 정렬될 때 그 모습이 마치 거품이 위로 하나씩 오르는 듯하다고 해서 이름이 붙여졌다. 원리와 코드가 간단하기 떄문에, 정렬 알고리즘을 배울 때 많이 쓰이는 듯 하다. 버블 정렬의 가장 중요한 원리는 다음과 같다. - 인접한 두개의 데이터를 비교해 가장 큰(혹은 작은) 데이터를 오른쪽에 오도록 위치를 바꾼다. 위 과정을 반복하면, 가장 오른쪽에는 가장 큰(혹은 작은) 데이터부터 쌓이게 된다. 이를 이용해 데이터를 정렬하는 과정을 버블 정렬(Bubble Sort)라고 한다. 2. 설명 PASS 1 버블 정렬은 항상 인접한 두개의 데이터를 비교해가며, Swap을 통해 자료를 정렬한다. 그 순서를 보면 다음과 같다. 우선 2 와 3 을 비교해본다. 3 이 2 보다 ..
[알고리즘] 1_1. 삽입정렬(Insertion Sort) 1. 정의 삽입 정렬(Insertion Sort)는 비교적 간단한 정렬 방법 중 하나이다. 삽입 정렬에서의 가장 중요한 규칙은 다음과 같다. - 현재 선택된 데이터 이전의 데이터들은 항상 정렬된 상태이다. 좀 더 알기 쉽게 그림으로 표현하자면, 다음과 같을 것이다. 이를 만족하는 상태로 데이터를 재정렬하는 과정을 삽입 정렬(Insertion Sort)라고 한다. 2. 설명 PASS 1삽입정렬은 두번째 Index부터 시작된다. 제일 앞의 원소는 원소가 하나이기 때문에, 그 자체로 정렬된 상태이기 때문이다. 우선, 4 와 2 의 크기를 비교해, 4 > 2 이므로, 2의 위치를 찾아 삽입해준다. PASS 2두번째로 5 가 선택된다. 5 앞의 정렬된 데이터의 최대값 4 보다 5 가 크므로, 현위치에 둔다. PA..
[알고리즘] 1. 정렬 1. 정의 정렬(Sort)이란 주어진 데이터를 일정한 규칙에 따라 재배열하는 것을 의미한다. 일반적으로 우리는 데이터를 정렬할 때, 오름차순(Ascending) 혹은 내림차순(Descending)으로 정렬 가능하다. 정렬 알고리즘은 많은 것들이 있는데, 현재도 꾸준히 제안되고 발전되고 있다. 많은 정렬 알고리즘들은 데이터의 양, 데이터의 초기 배열 상태 등에 따라서 그 성능이 달라지므로, 상황에 알맞은 정렬법이 필요하다. 2. 종류 1) 삽입 정렬(Insertion Sort) 현재 선택된 데이터를 정렬된 데이터 부분에서 위치를 찾아 '삽입'과정을 통해 정렬하는 방법이다. 성능은 평균적으로 O(n^2)이다. 다만 어느 정도 정렬된 데이터인 경우 매우빠른 속도를 자랑한다. >_본문으로 2) 버블 정렬(Bub..
[자료구조] 5. Tree 1. 정의Tree 구조는 Stack, Queue와 같은 선형적인 구조가 아니라 계층적인 구조를 가지고 있다. 계층적인 자료구조의 모습이 마치 나무와 비슷하게 보여, Tree라는 이름을 가지게 되었다. 자료를 Tree 구조로 저장하기 위해서는 나무의 잎인 Node에 데이터를 저장하고, 그 Node들의 연결을 가지(Branch)인 선분으로 연결한다. Graph의 측면에서 볼때, Tree는 cycle이 존재하지 않는 graph의 특수한 형태이다. 2. Tree 용어 정리- Node(노드) : Tree를 구성하는 기본 원소들을 말한다.- Root Node(루트 노드) : Tree를 구성하는 노드 중 가장 위의 노드를 일컫는다.- Parent : 어떤 노드의 Branch로 연결된 바로 위의 노드를 말한다.- Ch..
[Java] Eclipse 설치하기 1. 이클립스(Eclipse)Java 학습을 위해 JDK 설치를 했다면, Java 소스 코드를 메모장으로 작성해서 javac *.java 명령어를 통해 컴파일하고, java * 을 통해 Java로 작성한 프로그램을 실행할 수 있었을 것이다. 아마 C/C++을 배워본 사람이라면, 그리고 Visual Studio를 이용해서 코드를 작성해 본 사람이라면, 이 방법이 굉장히 비효율적이고 귀찮은 작업임을 알 수 있을 것이다. Java를 위한 편집 툴은 여러가지가 있지만, 현재 가장 많이 쓰이고 있는 것은 Eclipse이다. Eclipse는 2003년도에 IBM에 의해서 개발된 Java 프로그래밍용 편집 툴이다. Eclipse에서는 기본적인 오류 수정, 디버깅과 같은 기능은 물론 추가적인 플러그인을 통해서 안드로이..
[Java] Java 시작하기 1. 들어가기에 앞서... 요즘은 본격적으로 프로그래밍 교육 열풍이 시작된 듯 하다. 다만 '프로그래밍'이라는 분야가 일반인들이 학습해왔던 기본 학문과는 조금 다른 논리가 필요하다고 생각한다. 그래서 서 처음 프로그래밍 책을 펴본 사람들은 대체 무슨 말을 하는 것인지, 이걸 어떻게 활용할 수 있는 것인지 의아해 하는 사람들이 많을 것이라고 생각한다. 그것을 알고 숙달되기 까지는 조금 시간이 걸리겠지만, 정보화 시대에 할 줄 아는 프로그래밍 언어가 하나 쯤은 있었으면 좋겠다고 생각한다. 2. 자바(Java) 그래서 여기서는 프로그래밍 언어 중에서도 Java라는 언어를 다루어보고자 한다. Java라는 언어는 1995년 썬 마이크로시스템즈에 의해 개발된 언어로, 현재 쓰이는 언어 중에 가장 많이 사용되고 있는..