2021/09 56

12. 순차 탐색 (Sequential Search)

정의 - 데이터가 담겨있는 리스트를 앞에서부터 하나씩 비교해서 원하는 데이터를 찾는 방법 분석 - 최악의 경우 리스트 길이가 n 일 때 n 번 비교해야 한다 (찾는 값이 맨 마지막에 있을 경우) - O(n) 순차 탐색 (Sequential Search) public class SequentialSearch { public static void main(String[] args) { int[] arr = new Random().ints(10, 0, 30).toArray();; int index = sequential(arr, 10); System.out.println("arr = " + Arrays.toString(arr)); System.out.println("index = " + index); } pr..

08. 동적 계획법 (Dynamic Programing) 과 분할정복 (Divide and Conquer)

동적 계획법 (Dynamic Programing, DP) - 입력 크기가 작은 부분 문제들을 해결한 후, 해당 부분문제의 해를 재활용해서 보다 큰 크기의 부분문제를 해결 최종적으로 전체 문제를 해결하는 알고리즘 - 상향식 접근법으로 가장 최하위의 해답을 구한 후 이를 저장하고, 해당 결과값을 이용해서 상위문제를 풀어나가는 방식 - Memorization (메모제이션) 이란 프로그램 실행 시 이전에 계산한 값을 저장하여 다시 계산하지 않도록 하여 전체 실행속도를 빠르게 하는 기술 - 문제를 잘게 쪼갤 때, 부분문제는 중복되는 경우 재활용 된다 - 예) 피보나치 수열 * 요약 1. 작은 문제 부터 먼저 해결하여 값을 저장한다. 2. 점차 큰 크기의 문제 부분을 해결하는 데 중복된 작은 문제는 계산하지 않고 ..

02. MySQL - MySQL Tutorial for Beginners [Full Course] 내용 정리

OS Windows 10 PRO 64bit 버전 20H2 (OS 빌드 19042.867) MySQL 8.0.23 Community Server 영상 (3시간 10분) 시작 종류 관계형 데이터베이스 구조 비관계형 데이터베이스 구조 데이터 베이스 선택 USE 데이터베이스명 테이블 간단 조회 - 데이터 베이스를 선택한 경우 SELECT * FROM 테이블명 - 데이터 베이스를 선택하지 않은 경우 SELECT * FROM 데이터베이스명.테이블명 - 산술 연산이 가능하고 별칭을 줄 수 있습니다, 띄어쓰기를 하려면 '' 로 감싸주어야 합니다 중복된 데이터 제거하기 SELECT DISTINCT 컬럼명 FROM 테이블명 SELECT 간단 문제 데이터베이스의 모든 제품을 반환하는 SQL 쿼리를 작성하시요. [정답] 더보..

30. MySQL/기초 2021.09.18

00. 배열 | 큐 | 스택

📌 배열 (Array) 정의 데이터를 나열하고, 각 데이터를 인덱스에 대응하도록 구상한 데이터 구조 배열이 왜 필요할까 ? - 같은 종류의 데이터를 효율적으로 관리하기 위해 사용 - 같은 종류의 데이터를 순차적으로 저장 (인덱스가 존재) - 문자열과 같은 경우 순차적으로 저장되어 있어야 효율적으로 관리 될 수 있다 - 인덱스를 통해서 연결된 데이터의 일부분을 바로 접근할 수 있다 장점 빠른 접근 가능 : 배열의 첫번째 위치만 알면 인덱스를 통해 몇번째 만큼 떨어진 곳으로 바로 접근 가능 단점 추가 / 삭제가 쉽지 않다 삭제하는 경우 필요없는 공간을 가지고 있어야 한다 미리 최대의 길이를 지정해야 한다 고정된 길이 가변적 `JAVA` 라는 문자열을 저장하기 위해 미리 4정도의 크기를 갖는 배열을 생성해놓아..

10. 병합정렬 (Merge Sort)

병합정렬 (Merge Sort) public class MergeSort { public static void main(String[] args) { int[] numArr = {4, 1, 7, 3, 2, 8, 6}; int[] results = mergeSplit(numArr); System.out.println(Arrays.toString(results)); } private static int[] mergeSplit(int[] arr) { // 길이가 1개 이하 인 경우 return arr if (arr.length lp && right.length > rp) { // 왼쪽 배열의 크기 보다 lp 가 작은 경우 and 오른쪽 배열 크기 보다 rp 가 작은 경우 if (left[lp] > right[..

09. 퀵 정렬 (Quick Sort)

정의 - 정렬 알고리즘의 꽃 - 기준점(Pivot) 을 정해서, 기준점보다 작은 데이터는 왼쪽(left) 큰 데이터는 오른쪽(right)으로 모으는 함수 - 각 왼쪽 (left), 오른쪽 (right) 는 재귀용법을 사용해서 다시 동일함수를 호출하여 위 작업을 반복한다 - 함수는 왼쪽 (left) + 기준점 (pivot) + 오른쪽 (right) 을 리턴한다 - 왼쪽 퀵 정렬 일 때 0번째가 가장 작은 수 일 경우 최악의 성능이 나옴 (빠르긴 하나, 상황에 따라 성능이 차이가 날 수 있기 때문에 안정적이지 않은 편이다. 그 에 비해 같은 분할정복의 정렬 중 병합 정렬은 항상 동일한 성능을 가지고 있어 안정적이고 퀵 정렬보다는 아니지만 그에 준수 한 속도를 가지고 있다) 분석 - 병합정렬 (Merge So..

07. 재귀함수 (Recursive Call) - 경우의 수 구하기

재귀 함수 정수 n 이 입력으로 주어졌을 때 n을 1,2,3 의 합으로 나타낼 수 있는 방법의 수 구하기 public class RecursiveCall5 { public static void main(String[] args) { int num = 4; int numberOfCases = recursiveSum(num); System.out.println(numberOfCases); } private static int recursiveSum(int num) { if (num == 1) return 1; else if (num == 2) return 2; else if (num == 3) return 4; return recursiveSum(num - 1) + recursiveSum(num - 2) +..