목록알고리즘 (13)
불로구
선택 정렬 - 제자리 정렬 알고리즘의 하나로서, 리스트 중 최솟값을 찾아서 맨 앞에 위치한 값과 교체한다. - 맨 처음 위치를 빼고 나머지 리스트들도 위와 같은 방법으로 교체를 하는 알고리즘이다. 시간 복잡도 - 시간 복잡도는 O(n^2) 장단점 장점 데이터의 이동이 미리 정해진다! 단점 안정성을 만족하지 않는다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; public class Test{ public static void main(String[] args) { try { BufferedReader br = new..
브루트포스는 모든 경우의 수를 다 검사하는 알고리즘이다 이번에는 이 브루트포스 알고리즘을 이용해서 문자열을 검색해보자. 문자열 검색 - 어떤 문자열 안에 다른 문자열이 들어 있는지 알아보고 있다면 위치를 찾아내는 것 ex) "Hello" 에서 ll검색 -> 성공 브루트포스 예시 - "ABABCDEFGHA"에서 "ABC" 검색 -> 1) 맨앞에 A부터 시작하는 3개의 문자와 "ABC"가 일치하는지 검사 -> ABA는 ABC와 다르니 실패 -> 2) BAB를 검사 -> 실패 -> 3) ABC를 검색 -> 모두 일치 package 브루트포스; import java.io.BufferedReader; import java.io.InputStreamReader; public class 브루트포스1 { static ..
스택 - 데이터를 일시적으로 저장히기 위해 사용하는 자료구조 - 데이터의 I/O (입출력)은 LIFO( Last In First Out )구조 - 삽입(push) / 빼기(pop) 스택만들기 package 스택큐.스택; class StackEx{ private int max; //스택 용량 private int ptr;//스택 포인터 private int[] st;//스택 //기본 생성자 public StackEx(int capacity) { ptr = 0; max = capacity; try { st = new int[max]; }catch(OutOfMemoryError e) { max = 0; } } //push(삽입) public void push(int x){ if(ptr >= max) { Ove..
복잡도 - 알고리즘의 성능을 객관적으로 평가하는 기준 복잡도 종류 1) 시간복잡도 : 실행에 필요한 시간이 얼마인지? 2) 공간복잡도 : 기억 영역과 파일 공간이 얼마나 필요한지? method{ int i = 0; while(i 변수 i에 0을 대입하는 것은 한번이후 없으므로 O(1) - return의 경우도 한번만 실행하므로 O(1) - while의 조건과 if문, i++의 경우 평균횟수 n/2 -> n에 비례하는 경우의 복잡도를 O(n)으로 표기 n이 커지면 O(n)에 필요한 계산 시간은 n에 비례하여 점점 길어진다. O(1)의 경우 계산 시간은 변하지 않는다. O(f(n)) 과 O(g(n))의 복잡도 계산 - O(f(n)) + O(g(n)) = 0(max(f(n) , g(n)) - 2개 이상의 복잡..