목록프로그래밍/알고리즘 (18)
불로구
퀵 정렬이란? - 분할 정복 알고리즘의 하나로 평균적으로 빠른 수행 속도를 나타내는 정렬 방법이다 - 퀵 정렬은 리스트를 비균등 하게 분할하며, 피벗이란 임의로 고른 원소를 사용하여 정렬을 수행한다 - 피벗을 기준으로 작은 요소를 왼쪽으로, 큰 요소를 오른쪽으로 옮겨간다 - 피벗을 기분으로 분할된 요소들을 다시 정렬하기 위해 재귀 호출을 통해 정렬을 반복한다 - 리스트의 크기가 더 이상 분할할 수 없을 때까지 반복 먼저 PIVOT 계수를 정한다. PIVOT 계수는 임의로 선정한다 여기서는 첫 번째 요소를 PIVOT으로 결정 - PIVOT 값과 LEFT는 값을 비교하고 LEFT가 더 크면 RIGHT와 비교한다. 여기서 RIGHT 값이 PIVOT보다 작으면 LEFT와 RIGHT는 서로 SWAP 한다 ..
선택 정렬 - 제자리 정렬 알고리즘의 하나로서, 리스트 중 최솟값을 찾아서 맨 앞에 위치한 값과 교체한다. - 맨 처음 위치를 빼고 나머지 리스트들도 위와 같은 방법으로 교체를 하는 알고리즘이다. 시간 복잡도 - 시간 복잡도는 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 ..
앞에서 push, pop, peek 메서드에 대해 알아보았다. 그럼 이번에는 그 외 메서드에 대해 알아보자 indexOf - 검색 메서드로서, 스택 본체의 배열에 x와 같은 값의 데이터가 있는지 위치를 알려주는 메서드 - 배열 인덱스가 큰쪽에서 작은쪽으로 스캔 - 해당 데이터가 있으면 위치를 반환, 없으면 -1반환 clear - 스택에 모든 데이터 삭제 capacity - 스택의 용량을 반환하는 값 size - 데이터 수를 확인 IsEmpty - 스택이 비어있는지 검사 - 비었으면 true / 아니면 false IsFull - 스택이 가득 찼는지 검사 - 가득 찼으면 true / 아니면 false dump - 스택안에 있는 모든 데이터 표시 - 바닥에서 꼭대기 순으로 표시 - 스택이 비었으면, 비었다고 ..