[자료구조] 해시
·
공부/자료구조 | 알고리즘
해시 해시의 개념 해시 (Hash) : 입력 데이터를 고정된 길이의 데이터로 변환된 값 사용 예 : 암호, 블록체인, 메시지 인증 코드 등 해시의 특징 해시 값(hash value), 해시 코드, 체크섬이라고도 불린다. 키(key)에 데이터(value)를 매핑할 수 있는 데이터 구조이다. 검색과 저장이 빠르게 진행된다. 같은 입력값에 대해서 출력 값을 보장한다. 일방향성을 갖기 때문에 해시값으로부터 key를 역산할 수 없다. 해시 함수 (hash function) 이미지 출처 : https://namu.wiki/w/%ED%95%B4%EC%8B%9C 입력받은 데이터를 해시 값으로 출력시키는 알고리즘 임의의 길이를 갖는 데이터를 고정된 길이의 데이터로 변환 블록체인에서는 해시 함수가 하는 역할은 ‘암호화'로..
[자료구조] 정렬
·
공부/자료구조 | 알고리즘
정렬 선택 정렬 정렬되지 않은 원소들 중 가장 작은 원소를 찾아 가장 앞의 원소와 교환하는 알고리즘 이미지 출처 : https://gyoogle.dev/blog/algorithm/Selection%20Sort.html 방법 각 루프마다 최대 원소를 찾는다 최대 원소와 맨 오른쪽 원소를 교환한다 맨 오른쪽 원소를 제외한다 하나의 원소만 남을 때까지 반복 public void selectionSort(int[] arr) { int minIdx; int temp; for(int i = 0; i < arr.length - 1; i++) { minIdx = i; for (int j = i + 1; j < arr.length; j++) { if(arr[j] < arr[minIdx]) { minIdx = j; } }..
[자료구조] 힙
·
공부/자료구조 | 알고리즘
힙 (Heap) 힙의 개념 힙 (Heap) : 여러 개의 값들 중에서 가장 큰 값이나 가장 작은 값을 빠르게 찾아내도록(우선순위 큐를 위해) 만들어진 자료구조 힙의 특징 완전 이진 트리의 일종 부모 노드의 키 값이 자식 노드의 키 값보다 항상 큰 이진 트리 key(부모 노드) >= key(자식 노드) 중복된 값을 허용 반정렬 상태(느슨한 정렬 상태) 유지 큰 값이 상위 레벨이 있고 작은 값이 하위 레벨에 있음 삭제 연산이 수해오딜 때마다 가장 큰 값을 찾아내기만 하면 되므로 전체를 정렬할 필요 없음 시간 복잡도 : O(logn) 우선순위 큐 (Priority Queue) 큐에 우선순위라는 개념 접목 우선순위가 높은 데이터가 먼저 나감 힙, 배열, 연결리스트로 구현 가능하며 힙으로 구현하는 것이 가장 효율..
[자료구조] 그래프
·
공부/자료구조 | 알고리즘
그래프 그래프의 개념 그래프 (Graph) : 원소 사이의 연결 관계를 표현할 수 있는 자료구조 예 : 지도, 전기 회로의 소자들 등 그래프의 특징 현상이나 사물을 정점(vertex)와 간선(edge)으로 표현한 유한 집합이다. Gragh G = (V, E)로 표현한다. V : 정점 집합 E : 간선 집합 두 정점이 간선으로 연결되어 있으면 인접(adjacent)라고 한다. 네트워크 모델이다. 2개 이상의 경로가 가능하다. 방향, 무방향 그래프 모두 가능하다. 부모-자식 개념이 없다. 오일러 경로 (Eulerian Tour) 그래프에 존재하는 모든 간선(edge)을 한 번만 통과하면서 처음 정점(vertex)으로 되돌아오는 경로 오일러의 정리 : 그래프의 모든 정점에 연결된 간선의 개수가 짝수일 경우에만..
[자료구조] 트리
·
공부/자료구조 | 알고리즘
트리 트리의 개념 트리 (Tree) : 계층적인 구조를 가진 자료구조 예 : 가계도, 조직도, 컴퓨터의 디렉토리 구조 등 트리의 특징 노드가 N개인 트리는 항상 N - 1개의 링크(link)를 가진다. 트리의 루트에서 어떤 노드로 가는 경로는 유일하다. 임의의 두 노드간의 경로도 유일하다(같은 노드를 두 번 이상 방문하지 않는다는 조건하에). 일반적으로 각 노드가 데이터를 저장하는 데이터 필드와 자식 노드를 가리키는 링크 필드를 가지게하는 방법으로 프로그램에 표현한다. 트리의 용어 노드 (node) : 트리를 구성하는 기본 요소 루트 노드 (root node) : 계층적인 구조에서 맨 위에 있는 노드 서브 트리 (sub tree) : 트리에서 한 노드와 그 노드의 자손들로 이루어진 트리 부모 노드 (pa..
[자료구조] 연결 리스트
·
공부/자료구조 | 알고리즘
링크드 리스트 연결 리스트 (Linked List) 연결 리스트의 개념 연결 리스트 (Linked List) : 데이터와 포인터를 가진 각 노드들을 일렬로 연결시킨 형태의 자료구조 예 : 버킷 리스트, 요일들 등 연결 리스트의 특징 메인 메모리상 물리적으로 흩어져있는 데이터들을 서로 연결하여 하나로 묶는 방식 삽입/삭제 시 앞뒤에 있는 데이터들을 이동할 필요없이 해당 데이터들을 연결하는 줄만 수정하면 된다. 첫 번째 데이터만 알면 나머지 데이터들을 연결된 줄로 추적 가능하다. 포인터를 저장하기 위한 추가적인 메모리 공간이 필요하다. 연결 리스트의 구조 노드 (node) : 연결되는 상자, 데이터 필드와 링크 필드로 구성 데이터 필드 (data field) : 저장하고 싶은 데이터가 들어감 링크 필드 (l..
[자료구조] 스택과 큐
·
공부/자료구조 | 알고리즘
스택과 큐 스택 스택의 개념 스택 (STACK) : 데이터를 쌓아올리는 형태의 자료구조 예 : 접시 더미, 책상에 쌓여있는 책, 창고에 쌓여있는 상자 등 스택의 특징 후입선출 (LIFO: Last-In First-out) 방식 가장 최근에 들어온 데이터가 가장 위에 있으며 가장 먼저 나간다. 데이터의 들어오는 방향과 나가는 방향이 같은 단방향 입출력 구조이다. 스택에서 입출력은 맨 위에서만 일어나며 스택의 중간에서는 데이터를 삭제할 수 없다. 예: 스택에 A, B, C, D 순서대로 입력한 후 하나를 삭제하면 맨 위에 놓여진 D가 삭제된다. 스택의 구조 스택 상단 (stack top) : 입출력이 이루어지는 부분 스택 하단 (stack botton) : 스택 상단 반대쪽인 바닥 부분 요소 (element..
[Android/Kotlin] 안드로이드 스튜디오 알림 안뜸 해결
·
공부/안드로이드
결론 문제는 알림 권한 설정을 추가하지 않았기 때문이다. 1. 아래의 코드를 AndroidManifest.xml에 추가하도록 하자. 2. 그 다음 설정>앱>작업 중인 앱으로 가서 알림을 키면 된다. 계기 동아리 과제 중 Foreground를 사용해 보는 것이 있었다. 기본 코드 AndroudManifest.xml Foreground.kt package com.example.myapplication import android.app.NotificationChannel import android.app.NotificationManager import android.app.Service import android.content.Intent import android.os.Binder import android..