정보처리,전산/자료구조(7)
-
문제 해결에 적합한 알고리즘
스택 - 쌍이 맞는지: 스택은 후입선출(LIFO) 구조이기 때문에 괄호 쌍이 맞는지 확인하는 문제에 적합다. - 최근 키워드: 스택을 사용하여 최근 상태를 추적할 수 있다. 상황: 무언가를 저장하고 반대로 처리해야 할 때, 알고리즘이 재귀 특성을 가질 때, 최근 상태를 추적해야 할 때. 큐 - 순서대로: 큐는 선입선출(FIFO) 구조로 데이터를 순서대로 처리해야 하는 경우에 적합하다. - 스케줄링: 작업이나 프로세스 스케줄링에서 큐를 사용하여 먼저 도착한 작업부터 처리한다. 상황: 특정 조건에 따라 시뮬레이션할 때, 메모리 사용량이 제한적일 때의 탐색. 깊이 우선 탐색 (DFS) - 모든 경로: DFS는 모든 가능한 경로를 탐색하는 데 유용하다. 상황: 백트래킹 문제를 풀 때, 조합 및..
2024.08.31 -
삽입 정렬 insertion Sort
선택정렬은 주어진 리스트에서 최솟값을 찾아 첫 번째 위치에 놓고 나머지 리스트에서 최솟값을 찾아 두 번째 위치에 놓으며 이 과정을 리스트의 끝까지 반복한다. 선택정렬은 직관적이고 구현하기 쉽지만, 시간 복잡도는 \(O(n^2)\) 로 리스트의 길이가 길어질수록 성능이 떨어진다는 것을 의미한다.#include #include #include void selectionSort(int numbers[], int size) { for (int i = 0; i 삽입정렬 (Insertion Sort) 은 리스트의 요소를 하나씩 꺼내어 이미 정렬된 부분과 비교하여 적절한 위치에 삽입하는 방식이다. 두 번째 요소부터 시작하여, 현재 요소를 그보다 앞에 있는 요소들과 비교하여 현재 요소가 비교 대상 요소보다 작으..
2024.07.22 -
ArrayList LinkedList
ArrayList와 LinkedList는 데이터의 저장 방식과 접근 방식에 있다. ArrayList:내부적으로 배열을 사용하여 데이터를 저장하고 요소를 추가하거나 삭제할 때 배열의 크기를 조정, 이동해야 할 수 있으므로 연산의 속도가 느릴 수 있지만 임의의 위치에 있는 요소에 빠르게 접근할 수 있다. LinkedList: 노드의 연결 리스트를 사용하여 데이터를 저장하며 각 노드는 데이터와 다음 노드를 가리키는 포인터로 구성되어 요소를 추가하거나 삭제할 때 다음 노드의 포인터를 조정하여 삽입 또는 삭제를 수행한다. 중간에 요소를 추가하거나 삭제할 때 배열을 이동할 필요가 없으므로 연산의 속도가 빠르지만 인덱스를 통한 빠른 접근이 불가능하며, 원하는 위치에 도달하기 위해 첫 번째 노드부터 차례대로 탐색해..
2024.04.26 -
16진수 8진수
■ 16진수 컴퓨터 메모리 주소와 메모리 오프셋을 더 간결하게 표현할 수 있게 하고, 주소 간의 관계를 시각적으로 파악하기 쉽게 한다. 연산에서는 데이터의 각 비트를 개별적으로 조작, 색상 채널(RGB 또는 RGBA)을 표현, 상수나 메모리 주소 등을 16진수로 표현하여 코드의 가독성을 높이고 상수를 식별하기 쉽게 만든다. def binary_to_hex(binary): # 입력된 이진수를 뒤집다. binary = binary[::-1] # 4의 배수가 되도록 왼쪽에 0을 채웁니다. binary = binary.zfill((len(binary) + 3) // 4 * 4) hex_digits = '0123456789ABCDEF' # 16진수에 해당하는 문자들이다. he..
2024.03.29 -
이진탐색 binary search
이진탐색은 주어진 자료구조에서 원하는 항목을 빠르게 찾는 알고리즘 중 하나이며 정렬된 배열 또는 리스트에서 사용한다.1. 배열이나 리스트를 정렬2. 찾고자 하는 항목과 배열 또는 리스트의 중간 항목을 비교3. 찾고자 하는 항목이 중간 항목보다 작으면, 중간 항목의 왼쪽 부분을 대상으로 이진탐색을 재귀적으로 수행4. 찾고자 하는 항목이 중간 항목보다 크면, 중간 항목의 오른쪽 부분을 대상으로 이진탐색을 재귀적으로 수행5. 찾고자 하는 항목을 찾을 때까지 이 과정을 반복이진 탐색은 자료구조의 크기에 관계없이 시간 복잡도가 O(log n)이며 이진탐색의 효율성은 자료구조를 효율적으로 관리하고 검색을 수행하는 데 매우 유용하다. def binary_search(arr, target): left, righ..
2024.03.15 -
포인터 문제 c로 분석
#include int main(){ char a[] = "Art"; char* p = NULL; p = a; printf("%s\n", a); printf("%c\n", *p); printf("%c\n", *a); printf("%s\n", p); for(int i = 0; a[i] != '\0'; i++) printf("%c", a[i]); char a[] = "Art";에서 a는 문자 배열이며, "A", "r", "t", 널 종료 문자('\0')로 구성되어 있다. char* p = NULL;에서 포인터 p를 선언하고 초기화한다.. 여기서 초기화를 NULL로 하는 이유는 명시적으로 초기화해주지 않으면 포인터가 어떤 주소를 가리키는지 알 수 없기 때문이다. p=a에서 p는 a배열의 첫 번째 요소를 가리..
2024.01.01