일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 스프링부트핵심가이드
- 자바편
- /etc/network/interfaces
- Kernighan의 C언어 프로그래밍
- 코드로배우는스프링부트웹프로젝트
- resttemplate
- 티스토리 쿠키 삭제
- 목록처리
- 페이징
- 선형대수
- 자료구조와 함께 배우는 알고리즘 입문
- 처음 만나는 AI수학 with Python
- 리눅스
- 친절한SQL튜닝
- 네트워크 설정
- 구멍가게코딩단
- 서버설정
- d
- 스프링 시큐리티
- 처음 만나는 AI 수학 with Python
- 자료구조와함께배우는알고리즘입문
- 이터레이터
- GIT
- baeldung
- 데비안
- 코드로배우는스프링웹프로젝트
- 알파회계
- ㅒ
- network configuration
- iterator
- Today
- Total
목록전체 글 (406)
bright jazz music
이진 힙은 트리의 일종이다.이진 힙은 이진 탐색 트리와 같이 두 개의 자식을 가진다.두 자식이 부모보다 작은 경우, 즉 루트가 최대 크기가 되는 힙이 최대 힙이다.자식들이 부모보다 큰 경우 최소 힙이며 이 경우, 루트가 최소값이 되는 최소힙이다.이진 힙은 이진 탐색트리와는 다르게 두 자식을 나누는 기준이 없다. 좌우로 나누는 기준은 없다는 것이다. 그저 부모보다 크거나 작기만 하면 된다. 특정 인덱스를 가진 노드의 자식 노드의 인덱스를 확인하려면 아래와 같은 식을 따르면 된다.왼쪽 자식: 2n + 1오른쪽 자식: 2n + 2 역으로 자식 노드에서 부모 노드를 찾으려면부모 노드의 인덱스를 사용해 자식 노드의 인덱스를 구하는 방식을 역으로 하면 된다. 즉 2n+1을 역으로 하면 된다.(n-1)/2 을 하고..
1. 이진 탐색 트리(Binary Search Tree) 이진 탐색 트리는 각 노드가 최대 두 개의 자식을 가지며, 왼쪽 자식은 현재 노드보다 작은 값, 오른쪽 자식은 큰 값을 가지는 특별한 형태의 이진 트리이다. 필수 구현 메서드:insert(value) - 새로운 값을 적절한 위치에 삽입find(value) - 특정 값을 찾아서 반환remove(value) - 특정 값을 가진 노드를 삭제getMin() - 최솟값(가장 왼쪽 노드) 반환getMax() - 최댓값(가장 오른쪽 노드) 반환주요 구현 포인트: 1. 삽입 시 순서 결정:if (value 2. 삭제 시 3가지 경우 처리:리프 노드: 직접 삭제하나의 자식: 자식을 현재 위치로 승격두 개의 자식: 중위 후속자로 대체3. 균형 관리:트리가 한쪽으..
트리(Tree) 트리는 노드들의 계층적 구조로, 한 노드가 여러 자식 노드를 가질 수 있는 비선형 데이터 구조이다. 최상위에 있는 노드를 루트라 하고, 자식이 없는 노드를 리프 노드라 한다. 주요 용어:노드(Node) - 트리의 기본 요소로 데이터와 자식 노드들의 참조를 포함루트(Root) - 트리의 최상위 노드부모-자식(Parent-Child) - 두 노드의 직접적인 연결 관계리프(Leaf) - 자식이 없는 말단 노드높이(Height) - 루트에서 가장 먼 리프까지의 거리깊이(Depth) - 특정 노드까지 루트로부터의 거리장점:계층적 데이터 표현에 적합빠른 검색과 삽입 가능 (구현에 따라 O(log n))동적인 크기 조절 가능자연스러운 재귀적 구조단점:구현이 복잡할 수 있음균형 유지가 어려울 수 있음메..
스택(Stack)스택은 LIFO(Last In First Out) 원칙을 따르는 선형 데이터 구조이다. 데이터는 한쪽 끝에서만 삽입되고 삭제되며, 가장 최근에 추가된 항목이 가장 먼저 제거된다. 장점:단순하고 효율적인 구현모든 기본 연산이 O(1) 시간복잡도메모리 사용이 예측 가능하고 효율적함수 호출 스택, 실행 취소(undo) 기능 등에 적합단점:중간 데이터 접근 불가크기가 고정될 수 있음 (배열로 구현 시)데이터 검색에 부적합특정 위치 삽입/삭제 불가시간복잡도:push(): O(1)pop(): O(1)peek(top): O(1) - 스택의 맨 위 요소를 제거하지 않고 확인isEmpty(): O(1)search(n): O(n) - 특정 값 검색access(n): O(n) - 특정 위치 접근주요 응용:함..
이중 연결리스트(Doubly Linked List)이중 연결리스트는 각 노드가 데이터와 함께 이전 노드와 다음 노드를 모두 가리키는 포인터를 가진 선형 데이터 구조이다. 각 노드는 양방향으로 연결되어 있어 이전 노드와 다음 노드 모두에 접근이 가능하다.장점:1. 양방향 순회 가능 - 이전/다음 노드 모두 접근 가능2. 삭제 연산 최적화 - 이전 노드 참조가 있어 O(1)로 가능3. 특정 노드 탐색 최적화 - 양쪽에서 탐색 가능하여 단일 연결리스트 대비 평균 탐색 시간 절반4. 단일 연결리스트의 장점(동적 크기, 유연한 메모리 할당) 유지단점:1. 추가 메모리 공간 필요 (이전 노드 포인터 추가)2. 삽입/삭제 시 포인터 처리가 더 복잡3. 구현이 단일 연결리스트보다 복잡4. 특정 인덱스 접근은 여전히 O..
단일 연결리스트(Singly Linked List)단일 연결리스트는 각 노드가 데이터와 다음 노드를 가리키는 포인터를 가지고 있는 선형 데이터 구조이다.각 노드는 다음 노드만을 가리키며 (단방향), 이전 노드로는 접근할 수 없다. 장점:1. 동적 크기 - 메모리를 효율적으로 사용2. 삽입/삭제가 배열보다 효율적3. 메모리 할당이 유연함 단점:1. 특정 인덱스로의 접근이 O(n)2. 이전 노드로 접근 불가3. 추가 메모리 공간 필요 (다음 노드 포인터) 필수 구현 메서드 push() - 끝에 추가pop() - 끝에서 삭제shift() - 앞에서 삭제unshift() - 앞에 추가get() - 조회set() - 수정insert() - 중간 삽입remove() - 중간 삭제 위 목록은 단일 연결 리스트를 구현..
1. 스트링 타입의 타입확인// 스트링 타입의 타입 확인if (typeof val === "string" || val instanceof String) {...} 2. 객체 타입의 타입확인// 순수객체 타입의 타입 확인if (typeof val === "object" && // 객체 타입인지 확인 val !== null && // null 제외 (typeof null도 "object"이기 때문) !Array.isArray(val)) // 배열 제외{ // 순수 객체인 경우의 처리}//...const obj = { name: "Kim" }; // trueconst arr = [1, 2, 3]; // falseconst null_val = n..
function naiveSearch(long, short){ var count = 0; for(var i = 0; i
최대공약수(GCD, Greatest Common Divisor)두 수의 공통된 약수 중 가장 큰 수를 의미한다. 예를 들어, 12와 18의 최대공약수는 6다.12의 약수: 1, 2, 3, 4, 6, 1218의 약수: 1, 2, 3, 6, 9, 18공통된 약수: 1, 2, 3, 6 → 최대공약수는 6최소공배수(LCM, Least Common Multiple)두 수의 공통된 배수 중 가장 작은 수를 의미한다. 예를 들어, 12와 18의 최소공배수는 36이다.12의 배수: 12, 24, 36, 48, ...18의 배수: 18, 36, 54, ...공통된 배수: 36, 72, ... → 최소공배수는 36 최소공배수와 최대공약수의 관계두 수 a, b에 대하여 다음과 같은 관계가 성립한다: LCM × GCD ..
-데이터 셋을 작은 부분으로 나누고 해결을 반복한다. 이러한 방법을 사용하면 시간복잡도가 크게 감소한다.-정렬, 탐색 등 많은 다른 알고리즘에서 사용된다. - 주로 배열이나 문자열 같은 큰 규모의 데이터셋을 처리한다. 예시: 배열에서 특정 값을 찾는 경우. 선형탐색으로 찾을 수도 있지만 아래처럼 이진탐색 할 수도 있다.function search(array, val) { // 단 배열이 정렬돼 있어야 함 let min = 0; let max = array.length -1; while (min val) { max = middle - 1; } else { return middle; } } ret..