본문 바로가기

반응형

분류 전체보기

(247)
[JAVA] 변수와 상수 1. 변수란? 프로그래밍에서 변수는 값을 저장할 수 있는 메모리상의 공간을 의미한다. 이 공간에 저장된 값은 변경될 수 있기 때문에 변수라는 이름을 사용하게 되었다. 하나의 변수에는 단 하나의 값만 저장할 수 있으므로, 새로운 값을 저장하면 기존의값은 사라진다. 2. 변수 선언과 초기화 - 변수 선언 변수의 선언 방법은 다음과 같다. // (변수 타입) (변수 이름) int age; age라는 이름의 변수를 선언한 예시이다. 변수 타입은 변수에 저장된 값이 어떤 타입인지를 지정하는 것이다. 선언하는 변수에 저장하고자 하는 값의 타입의 종류에 맞게 타입을 선언해주면 된다. 변수 이름은 말 그대로 변수를 사용하기 위해 붙여준 이름이다. 변수는 값을 저장하는 메모리 공간이고 변수 이름은 해당 공간을 가리키는 ..
[JAVA] 자바 개발환경 구축 및 프로그래밍 시작 자바 개발환경 구축 1. JDK 설치 JDK는 Java Development Kit로 JVM과 자바클래스 라이브러리 (Java API) 외에 자바 프로그래밍을 하기 위해 필요한프로그램들이 설치된다. JDK를 설치한 후에는 설치된 디렉토리의 bin 디렉토리를 path에 추가해주어야 한다. path에 등록된 경로를 통해서OS가 파일의 위치를 파악하는데 사용하는 경로로 디렉토리를 등록하면 따로 파일 경로없이 파일 이름만으로 사용할 수 있다. JDK의 주요 실행파일들은 다음과 같다. javac.exe: 자바 컴파일러, 자바 소스코드를 바이트 코드로 컴파일한다. java.exe: 자바 인터프리터, 컴파일러가 생성한 바이트 코드를 해석하고 실행한다. javap.exe: 역어셈블러, 컴파일 된 클래스 파일을 원래의 ..
[JAVA] 자바 (Java Programming Language) 1. 자바란? 자바는 썬 마이크로시스템즈에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다. 자바의 가장 중요한 특징은 OS에 독립적이라는 것이다. 자바로 작성된 프로그램은 운영체제의 종류에 관게없이 실행이 가능하기 때문에 운영체제의 종류와 버전에 상관없이 실행이 가능하다. 이러한 장점으로 인해 자바는 다양한 기종의 컴퓨터와 운영체제가 공존하는 인터넷 환경에 적합한 언어로 인터넷의 발전과 함께 많은 사용자를 확보하게 되었다. 또한 객체지향개념과 C++의 장점들을 채택하는 반면 잘 사용하지 않는 부분을 제외시켜 간결하고 쉬운 표현이 가능하도록 했다. 2. 자바의 역사 자바는 1991년 썬의 엔지니어들에 의해 고안된 Oak라는 언어에서 시작되었다. 처음에는 가전제품에 탑재될 소프트..
[Algorithm] Binary Search (이진탐색) 1. Binary Search (이진탐색) 이미 정렬되어 있는 배열에서 원하는 값을 찾을 때 사용하는 탐색 방법이다. 탐색 대상이 되는 리스트의 중간값을 기준으로 반으로 나눠 반복적으로 탐색을 진행한다. 찾고자 하는 타겟값이 중간값보다 작은 경우에는 왼쪽 리스트를 중간값보다 큰 경우에는 오른쪽 리스트를 탐색 대상으로 반복 탐색을 진행한다. 만약 타겟값과 중간값이 일치하는 경우 해당 위치를 반환하면 된다. 만약에 반복을 계속해서 서브 리스트의 크기가 0일 때까지 반복한다. 2. Binary Search 구현 import java.util.Arrays; import Algorithm.Search.Search; public class BinarySearch implements Search { private i..
[Algorithm] Counting Sort (계수정렬) 1. Counting Sort 계수 정렬은 배열의 원소의 개수를 세어 정렬하는 방식의 알고리즘이다. 특정 값을 가진 원소가 몇개인지를 세어 개수를 가지고 정렬을 진행하기 때문에 특정한 범위의 값들을 원소로 가질때 적합하다. 범위가 넓은 경우에는 원소들을 계수하기 위해 할당하는 배열의 크기가 커지는 문제가 발생한다. 2. Counting Sort 구현 배열의 원소들을 각각의 값에 따라 계수하기 위해서 원소들의 개수를 저장할 임시 배열을 할당한다. 이때 임시 배열의 크기는 배열에 저장된 값의 범위에서 가장 큰 값으로 한다. 임시 배열을 생성한 후에는 기존 배열을 처음부터 끝까지 탐색하면서 해당 원소의 값을 인덱스로 가지는 임시 배열의 원소의 값을 하나씩 더해준다. 기존 배열의 탐색이 끝난 뒤에는 임시 배열을..
[Algorithm] Quick Sort (퀵정렬) 1. Quick Sort (퀵정렬) 퀵 정렬은 병합 정렬과 같은 divide and conquer 기반의 알고리즘이다. 정렬시에 한 요소를 pivot으로 지정하고 pivot을 기준으로 배열을 두 부분으로 나눈다. 이때 pivot을 선택하는 방법은 여러가지가 있다. 첫번째 요소를 pivot으로 지정한다. 마지막 요소를 pivot으로 지정한다. 랜덤하게 pivot을 지정한다. 중간에 위치한 요소를 pivot으로 지정한다. 퀵 정렬은 정렬 알고리즘 중 가장 빠른 알고리즘으로 알려져 있지만, 배열의 정렬 상태와 pivot 선택 방법에 따라 worst case에 O(N^2)의 시간 복잡도를 가질 수 있다. 퀵 정렬의 핵심은 pivot을 중심으로 partition을 나누는 과정이다. pivot으로 지정된 요소의 값..
[Algorithm] Heap sort (힙정렬) 1. Heap Sort (힙정렬) 힙 정렬은 자료구조 중 하나인 binary heap을 활용하여 정렬하는 방법이다. 데이터를 최대 힙 또는 최소 힙으로 구성하여서 정렬을 진행하는데, 내림차순 정렬을 위해서는 최대 힙을 구성하고 오름차순 정렬을 위해서는 최소 힙을 구성하면 된다. 바이너리 힙을 구성하게 되면 해당 자료구조 내에서 최소값, 또는 최대값을 알 수 있기 때문에 이 값들을 반복해서 찾아 정렬을 진행할 수 있다. 힙정렬을 위해서는 두가지 프로세스를 반복해야한다. 바이너리 힙 구조를 만드는 과정 (heapify) 힙의 root 값을 가져와 정렬된 메모리에 저장하는 과정 위의 두 과정을 트리에 남아있는 데이터가 없을 때까지 반복한다. 2. Heap Sort 구현 맨 처음 max heap 을 구성한다. ..
[Algorithm] Merge Sort (병합 정렬) 1. Merge Sort (병합 정렬) 병합 정렬은 divide and conquer를 기반으로 한 정렬 알고리즘이다. 정렬할 배열을 더이상 나누어지지 않을 때까지 반으로 나눈 뒤 다시 병합하면서 비교를 통해 정렬을 진행한다. 병합과정에서 비교하는 두 배열은 각각 이미 정렬되어 있는 배열들이다. 그렇기 때문에 각각 배열의 처음부터 더 작은 값을 선택하는 방식으로 병합하면서 정렬을 진행한다. 병합정렬의 진행 과정은 다음과 같다. divide: 정렬을 진행할 배열의 크기가 1이 될 때까지 대상이 되는 배열을 반으로 나누어 두 개의 부분 배열로 나눈다. conquer: 분할이 완료된 배열들을 재귀적으로 병합을 진행한다. combine: 병합시에 두개로 나누어진 부분 배열들의 값을 비교하여 하나의 정렬된 배열로..

반응형