본문 바로가기

CS지식

(51)
[CS 지식 - 알고리즘] 선택정렬 1. 선택정렬 제자리 정렬(in-place sortin) 알고리즘의 하나 ▶ 입력배열(정렬되지 않은 값들) 이외에 다른 추가 메모리를 요구하지 않는 정렬방법 해당 순서에 원소를 넣을 위치는 이미 정해져있고 어떤 원소르 넣을지 선택하는 알고리즘 1. 첫번째 순서에는 첫번째 위치에 가장 최솟값을 넣는다 2. 두번째 순서에는 두번째 위치에 남은 값중에서의 최솟값을 넣는다 반복 장점 : 자료 이동 횟수가 미리 결정됨 단점 : 안정성을 만족하지 않음 ▶ 값이 같은 레코드가 있는 경우 상대적인 위치 변동 가능성 있음 2. 정렬방법 주어진 배열 중에서 최솟값을 찾음 그 값을 맨 앞에 위차한 값과 교체(pass) 맨 처음 위치를 뺀 나머지 리스트르 같은 방법으로 교체 하나의 원소만 남을때 까지 반복 더보기 참고) [알..
[CS 지식 - 알고리즘]버블정렬(거품정렬) 1. 버블정렬 서로 인접한 두 원소를 검사하여 정렬하는 알고리즘 인접한 2개의 레코드를 비교하여 크기 순서대로 되어있지 않으면 교체 장점 : 구현이 간단 단점 - 순서에 맞지 않은 요소를 인접한 요소와 교환 - 하나의 요소가 가장 왼쪽에서 가장 오른쪽으로 이동하기 위해서는 배열에서 모든 다른 요소들과 교환 - 특정 요소가 최종 정렬 위치에 이미 있는 경우라도 교환이 되는일이 일어남 - 연산 수가 가장 많아 알고리즘 중에서 상대적으로 가장 느리고 효율이 떨어짐 ▶ 일반적으로 자료의 교환작업( SWAP)이 자료의 이동작업(MOVE)보다 더 복잡하기 때문에 버블정렬은 단순성에도 불구하고 거의 쓰이지 않음 선택정렬과 기본 개념이 유사 버블정렬 선택정렬 요소를 교환정렬 요소를 선택하여 정렬 안정적 알고리즘 불안정..
[CS 지식 - 알고리즘] DFS와 BFS 1. 그래프 탐색 알고리즘 탐색(Search)은 많은 양의 데이터중에서 원하는 데이터를 찾는 과정 종류 - DFS - BFS 2. DFS(Depth - First Search) : 깊이우선 탐색 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘 특징 - 자기 자신을 호출하는 순환 알고리즘 형태를 가지고 있음 - 전위 순회(Pre-Order-Traversals)를 포함한 다른 형태의 트리 순회는 모두 DFS의 한 종류 - 어떤 노드를 방문했었는지 여부를 반드시 검사해야함 ▶ 검사하지 않으면 무한루프에 빠질 위험이 있음 - Stach 자료구조(후입선출)사용 과정 a노드(시작 노드)방문 ▶ 방문한 노드는 방문했다고 표시 a와 인접한 노드를 차례로 순회함 ▶ a와 인접한 노드가 없다면 종료 a와 이웃한 노드 ..
[CS지식 - 알고리즘] 순열과 조합 1. 순열 길이가 n인 배열에서 r개의 요소를 차례대로 뽑아 배열을 만들었을 때, 가능한 모든 배열(중복제외) ▶순열, 중복순열, 조합, 중복조합은 모두 n개에서 r를 뽑다는다는 점에서 동일 특징 : 정렬 순서가 있음 1-1. Visited 배열 이용 static void permutation(int[] arr, int[] out, boolean visited[], int depth, int n, int r){ //arr[] : 뽑고자 하는 배열 //out[] : 출력결과가 저장되는 배열 //visited[] : 배열의 방문 여부 체크 //depty : 현재 탐색하고 있는 인덱스 //n: 배열의 길이 //r : 뽑고자 하는 순열의 갯수 if(depth == r){ System.out.println(out..
[CS 지식 - 알고리즘] 최소공통조상(LCA) 1. 최소공통조상 트리(Tree)구조에서 특정한 두 노드의 공통된 조상 중 가장 가까운 조상을 의미 특징 : 트리에서 두 노드 사이의 거리를 빠르게 구하는 등 다양한 계산에 활용가능 일종의 다이나믹 프로그래밍 반드시 이진트리(Binary Tree)가 아니어도 일반적인 형태의 트리라면 적용가능 예시) ▶ 위와 같은 트리구조에서 13,15번 의 최소 공통조상은 5번노드가 됨 2. 구하는 방법 2-1. LCA를 선형 탐색으로 구하기 : O(Depth) 가장 단순한방법 두 포인터를 두고 가리키는 정점이 같아질때까지 부모노드로 거슬러 올라가면 됨 ▶ Parent[x]를 정점x의 부모노드라 할때, x =Parent[x]연산을 반복하면 됨 위의 그림과 같이 두정점의 LEVEL(깊이)가 다르다면 문제가 발생 13번은 ..
[CS 지식 - 알고리즘] 최장 증가 부분 수열(LIS) 1. 최장 증가 부분 수열 원소가 n개인 배열의 일부 원소를 골라내서 만든 부분 수열 중, 각 원소가 이전 원소보다 크다는 조건을 만족하고, 그 길이가 최대인 부분 수열 부분 수열 : 어떤 수열이 주어질 떄, 그 수열에서 일부 원소를 뽑아내어 새로 만든 수열의 부분 수열 증가 부분 수열 : 부분수열이 오름차순을 유지하는 것 LIS : 어떤 수열에서 만들 수 있는 부분 수열 중 가장 길면서 오름차순을 유지하는 수열 예시) 위와 같은 길이가 8인 수열이 주어진다고 가정 이 수열에서 증가하는 부분 수열을 뽑는다면 다음과 같이 여러 수열이 나올 것 [2, 3], [1, 3], [2, 5],[2, 3, 5],[1, 3, 5]등등 ▶ 이중 가장 긴 수열은 [2, 3, 5, 6, 7] 물론 [1, 3, 5, 6, 7..
[CS 지식 - DB] DB 설계순서 1. DB 설계순서 요구조건 분석 : 요구 조건 명세서 작성 개념적 설계 : 개념 스키마, 트랜잭션 모델링, E-R 모델링 논리적 설계 : 논리 스키마, 트랜잭션 인터페이스 설계 물리적 설계 : 구조의 데이터로 변환 구현 : DDL로 데이터베이스 생성, 트랜잭션 작성 1-1. 요구조건 분석 데이터베이스를 사용할 사람들의 필요한 용도 파악 데이터의 종류, 용도 형태 등을 수집 수집 된 정보를 바탕으로 요구 조건 명세 작성 요구사항 명세 : 실제 단계에서 중요하게 사용, 데이터베이스 품질을 결정짓는 중요한 역할 1-2.개념적 설계 개념 스키마 모델링과 트랜잭션 모델링 수행 개념 스키마 설계 ** 개념 스키마 : 전체 DB가 어떤 구조로 되어있는지, 구체적으로 어떤 데이터가 있고, 그 데이터들은 어떤 테이블에..
[CS지식 - Spring] POJO(Plain Old Java Object) 1.POJO(Plain Old Java Object) JavaEE등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크데 종속된 '무거운'객체를 만들게 된것에 반발해서 사용되게 된 용어(위키백과) 등장배경 : 특정 '기술'과 환경에 종속되어 의존하게 된 자바코드는 가독성↓ , 유지보수↓, 확장성↓ 이로인해 객체지향 언어인 자바가 객체지향의 장점들을 잃어버리게되어 POJO개념이 등장 ▶특정 기술에 종속되지 않는 순서한 자바 객체 특정 프레임워크를 의존하게 되다면 POJO라고 할 수 없음 예시1) public class UserDTO { private String userName; private String userId; private String userPassword; public String getU..