Programming/Java Algorithm 기초

    Group Algorithm - 그룹 알고리즘

    1. Group Algorithm - 그룹 알고리즘 package Algorithm; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class GroupAlgorithm { //[?] 컬렉션 형태의 데이터를 특정 키 값으로 그룹화 //그룹 알고리즘(Group Algorithm) : 특정 키 값에 해당하는 그룹화된 합계 리스트를 만듦 public static class Record{ private final String name;//상품명 private final int quantity;//수량 public Record(String name, int quantity) { this.name = name; t..

    그룹 알고리즘(Group Algorithm) - 이론

    1. Group Algorithm - 그룹 알고리즘 우선 원본 데이터를 정렬한다. 정렬된 원본 데이터를 n번째 데이터와 n+1번째의 데이터를 비교하여 그룹 데이터로 복사한다. 그 과정에 중복된 데이터가 있으면 그 값을 더한 뒤 복사한다.

    Mode Algorithm - 최빈값 알고리즘

    1. Mode Algorithm - 최빈값 알고리즘 count알고리즘과 max알고리즘이 복합된 형태라고 생각하면 됨. 추가적인 것은 반복문을 활용해 data를 다른 데이터의 index로 변환하는 과정이 필요 //scores배열의 값이 indexes의 index가 됨. for(int i = 0; i

    최빈값 알고리즘(Mode Algorithm) - 이론

    1. 최빈값 알고리즘(Mode Algorithm) 데이터(배열)중 가장 많이 나타나는 값을 찾는 알고리즘. 1.1. 구조 Data배열의 값을 또 다른 배열의 Index로 저장한다. 그리고 count알고리즘을 통해 개수를 저장. max알고리즘으로 가장 개수가 많은 값을 찾고 그 인덱스가 Mode(최빈값)이 된다. 여기에서는 배열의 index(정수 0~)를 사용하지만, HashTable을 사용해 index를 임의로 정할 수 있다.

    Merge Algorithm - 병합 알고리즘

    Merge Algorithm - 병합 알고리즘 오름차순으로 정렬되어 있는 두 정수 배열을 하나로 병합 package mergeAlgorithm; //[?] 2개의 정수 배열 합치기 : 단 2개의 배열은 오름차순으로 정렬되어 있다고 가정 //병합 알고리즘(Merge Algorithm) : 오름차순으로 정렬되어 있는 정수 배열을 하나로 병합 public class MergeAlgorithm { public static void main(String[] args) { //[1] input int[] first = {1, 3, 5}; int[] second = {2, 4}; int M=first.length; int N=second.length; // 관행 적으로 배열은 M, N으로 많이 표현함 int[] me..

    병합 알고리즘 (Merge Algorithm) 이론

    Merge Algorithm - 병합 알고리즘 정렬된 두 개의 배열의 요소를 비교해 새로운 배열에 작은 값부터 하나씩 채워가는 알고리즘 하나의 배열의 비교가 끝나면 다른 하나의 값을은 그대로 merge 배열 뒤에 붙는다. 위 그림을 보면 b[N]배열이 먼저 끝났기 때문에 a[M]배열의 나머지 요소가 그대로 c[M+N]배열로 들어감.

    Search Algorithm - 검색 알고리즘

    Search Algorithm - 검색 알고리즘 정렬(오름/내림차순)되어있는 데이터를 이진 검색(이분 탐색)을 사용해 반씩 나눠 검색한다. low값과 high값이 만날 때 까지 반복하는 while반복문을 활용하고, 포인터 역할을 하는 중간 값((low+high)/2)을 mid변수로 선언하고 찾는 값(search 변수)과 비교하는 if문을 작성한다. 찾을 데이터 값이 mid값보다 크면 low = mid+1 찾을 데이터 값이 mid값보다 작으면 high = mid-1 package searchAlgorithm; //[?] 정렬되어 있는 데이터를 이진 검색(이분 탐색)을 사용해 반씩 나눠 검색. //검색 알고리즘(Search Algorithm) : 주어진 데이터에서 특정 데이터 찾기 public class S..

    검색 알고리즘 (Search Algorithm) 이론

    목차 1. 검색(Search) 알고리즘 배열 등의 데이터에서 특정 값을 검색하는 알고리즘. 일반적으로 순차 검색, 이진 검색으로 구분할 수 있다. 순차 검색(Sequencial Search) : 전체 데이터를 처음부터 끝가지 순서대로 검색 이진 검색(Binary Search) : 정렬되어 있는 데이터를 절반으로 나눠 검색. 1.1 이진검색 알고리즘 이진 검색 알고리즘은 주어지 데이터가 오름차순으로 정렬되어 있다고 가정. 만약 실제 데이터가 정렬되어 있지 않다면, 우선 정렬 알고리즘을 이용해 정렬한 후에 이진 검색 알고리즘을 적용해야 함. 이진 검색 알고리즘은 영어로 Divide and Conquer(나누기 및 정복)이라고 표현하는데 의미 그대로 데이터를 나누고 검색하여 순차검색보다 효율을 높인다. 1,3..

    Sort Algoritm - 정렬 알고리즘

    Sort Algoritm(정렬 알고리즘) 선택 정렬 (Selection Sort) : 왼쪽 또는 오른쪽의 수와 비교 후 자리를 바꾸며 오름/내림차순으로 정렬하는 방법. 무작위의 수로 이루어진 배열의 요소를 오름차순 || 내림차순으로 정렬하는 알고리즘. package sortAlgorithm; //SortAlgorithm(정렬 알고리즘) - 선택 정렬 public class SortAlgoritm { public static void main(String[] args) { int[] numbers = {3,2,1,5,4}; //무작위 배열 for(int i = 0; i < numbers.length; i++) { for (int j = i+1; j < numbers.length; j++) { if(numb..

    Sort Algoritm(정렬 알고리즘) 이론

    목차 1. Sort Algoritm - 정렬 알고리즘 주어진 범위 내에서 불규칙적으로 나열된 순서를 일정 기준에 따라 순서대로 나열하는 알고리즘. 여기서는 선택 정렬만 설명할 것임. 오름차순 : 1, 2, 3 / A, B, C 순으로 작은 것부터 큰 순으로 정렬 내림차순 : 3, 2, 1 / C, B, C 순으로 작은 것부터 큰 순으로 정렬 1. 1. 선택 정렬(Sellection Sort) 알고리즘 데이터 하나를 기준으로 나머지 데이터와 비교함. 가장 작거나 큰 데이터와 자리를 바꾸는 식으로 반복 비교하는 정렬 방법. 데이터 개수가 n개 -> 전체 회전수는 n-1회. 오름차순 기준으로 배열의 처음에는 가장 작은 데이터가 채워짐 1. 2. 선택 정렬의 회전 배열 data[5]를 선택 정렬을 사용해서 오름..

    Rank Algoritm - 순위 알고리즘

    Rank Algoritm - 순위 알고리즘 주어진(지정한 범위) 데이터의 순위(등수)를 구하는 로직 갯수(count) 알고리즘을 응용했음. scores[i]와 scores[j]를 비교하여 rank를 ++하는 것이 포인트 package rankAlgoritm; //순위 알고리즘 : 데이터에 대한 순위 구하기. //[?] : 주어진(지정한 범위) 데이터의 순위(등수)를 구하는 로직 public class RankAlgoritm { public static void main(String[] args) { //[1]input int[] scores = {50, 35, 80, 75, 65, 15, 100, 68}; int[] rank = {0, 0, 0, 0, 0, 0, 0, 0}; //[2]process : r..

    Near Algoritm - 근사값 알고리즘

    Near Algoritm - 근사값 알고리즘 근삿값 알고리즘: 차이값의 절대값의 최소값 = 근사값 차이값 = (데이터 - 대상값(target)) package nearAlgoritm; //근삿값 알고리즘: 차이값의 절대값의 최소값. //[?] 원본 데이터중에서 대상 데이터와 가장 가까운 값을 구한다 public class NearAlgoritm { //[0] 절댓값 구하기 로컬 함수 // number가 음수면(참) 양수로 변환하고, 양수면(거짓) 양수 그대로 나오는 메서드 public static int Abs(int number) { return (number < 0 ) ? -number : number; } public static void main(String[] args) { //[1] Initi..