[Data Structure] Stack 구조
·
Algorithm&Data Structure
이번 글에서는 자료구조의 대표적인 stack 구조에 대해 정리해 보겠다. stack에 대해 정리하고 Java코드로 구현해보겠다. Stack 구조란? 자료구조에서 대표적인 후입선출 특성을 지닌다. (LIFO Last In First Out) Stack은 한쪽으로만 데이터를 넣고 뺄 수 있다. 입구와 출구가 단 한 개이므로 마지막으로 넣은 데이터가 제일 먼저 빠져나오는 구조이다. Stack은 마치 테이블 위에 책을 쌓는 것과 같다. 제일 처음 올려둔 책이 맨 아래, 제일 마지막에 올린 책이 맨 위로 쌓일 것이다. 그리고 제일 마지막에 올린 책을 제일 먼저 꺼내는 구조이다. Stack에서 데이터를 넣는 것을 push 데이터를 꺼내는 것을 pop이라고 부른다. 그림처럼 ..
[Algorithm] 이진 검색
·
Algorithm&Data Structure
선형 검색은 검색 알고리즘에서 성능이 굉장히 안 좋은 알고리즘이다.물론 데이터 양이 적으면 별반 차이는 없고 찾고자 하는 값이 제일 맨 앞에 위치해 있으면 선형 검색이 더 빠를 수 있다. 평균적으로 검색하는 데이터가 많다고 가정하면 이진 검색은 성능이 좋은 검색 알고리즘이다.   이진 검색의 역사   이진 검색은 John Mauchly와 John von Neumann이 설계한 초기 컴퓨터 알고리즘 중 하나로 거슬러 올라간다. 이진 검색의 기본 개념은 그보다 훨씬 이전이다.  이진 검색이 처음 문서화된 사례는 1946년 Derrick Henry Lehmer가 쓴 "Mathematical Tables and Other Aids to Computation"에 기록되어 있다.  이진 검색은 컴퓨터 과학의 발전과..
[Algorithm] 선형 검색
·
Algorithm&Data Structure
이번글에서는 배열에서 어떤 값을 검색하는 알고리즘 중 선형 검색에 대해 정리해 보겠다. 선형 검색(linear search)은 순차 검색(sequential search)라고도 불린다. 선형 검색 알고리즘은 매우 단순하다.  크기 5인 배열에서 어떤 값을 찾는다고 가정하자.    그림처럼 배열 맨 처음부터 끝까지 순차적으로 배열의 요소와 찾는 값을 비교하면 된다.     즉 선형 검색 알고리즘의 종료 조건은 2가지이다. 1. 검색할 값을 찾는 경우2. 검색할 값을 찾기 못하고 배열의 끝까지 지나는 경우   선형 검색의 단점은 배열의 크기 (데이터 양)가 커지면 반복문도 크기만큼 돌아갈 수 있으니 시간이 오래 걸리는 검색 알고리즘이다. 단순한 만큼 효율성이 안 좋다. import java.util.Scan..
[Sort] 버블 정렬
·
Algorithm&Data Structure
컴퓨터과학에서 데이터를 정렬하는 것은 매우 중요하다. 중요한 만큼 다양한 정렬 알고리즘이 존재하는데 차차 다 알아가 보자.   버블정렬   버블 정렬(Bubble sort)은 배열을 순차적으로 비교하면서 정렬하는 알고리즘이다.  1번째와 2번째 원소를 비교하고 정렬하고, 2번째와 3번째 비교 후 정렬 ...... n-1, n번째 비교 후 정렬이다.   버블 정렬은 정렬 알고리즘 중 가장 최악의 성능을 보여주는 알고리즘이다.   정렬에 대표적인 O(N^2)의 알고리즘이며   O(n^2)은 1만 개 데이터를 1초에 정렬한다면 10만 개의 데이터는 100초 정도나 걸린다.       버블 정렬은 성능이 최악이다. 보통 프로그래밍 처음 공부할 때 정렬을 처음 공부할 때 버블 정렬부터 공부를 한다. 가장 이해하기..
[Algorithm] 기수 변환 프로그램
·
Algorithm&Data Structure
사용자에게 양의 정수값을 입력받고, 변환하고 싶은 진수를 정수로 입력받는다. 그리고 정수n을 입력받아 n을 사용자가 원하는 진수로 변환하는 프로그램을 만들고자 한다.   package binaryProgram;class DivideNum { String fillTheCharArr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; divideNum() { } int divideNum(int number, int divide, char[] cArr) { int digits = 0; do { cArr[digits++] = fillTheCharArr.charAt(number % divide); numb..