jjuya

AES란?AES (Advanced Encryption Standard)은 고급 암호화 표준, 암호화 및 복호화 시 동일한 키를 사용하는 대칭 알고리즘입니다높은 안정성과 빠른 속도로 현재 가장 대중적으로 사용되어지고 있는 암호화 알고리즘입니다! AES 종류각각 뒤에 붙은 숫자는 암호화 및 복호화에 사용되는 키의 길이를 의미합니다.AES-128AES-192AES-256 AES-256Secret Key암호화 할 대상인 평문을 암호화하는 데 사용됩니다.이 키는절대로 외부에 노출되면 안 됩니다256bit의 secret key를 사용합니다. Block Cipher(블록 암호)128비트의 고정된 블록 단위로 암호화를 수행합니다.주어진 암호황을 128비트씩 나누어 블록 단위로 암호화를 진행하게 되는데 이렇게 블록 단위..
그래프(Graph)정점(Vertex)과 간선(Edge)으로 이루어진 자료구조 G = (V, E)정점 : 데이터 / 간선 (데이터 간의 관계, 방향성)   그래프의 종류방향그래프 : 간선의 방향 O무방향 그래프 : 간선의 방향 X가중치 방향 그래프 : 간선의 가중치-> 지도상의 위치... 그래프 표현인접행렬2차원 배열을 사용, 그래프의 장점들 간의 연결 관계 표현행렬( i , j ) 위치에 간선의 유무를 나타냄무방향 - 간선존재 1 / 간선 없음 0방향그래프 - ( i -> j ) 일 때 간선이 존재하면 1 / 없으면 0가중치 그래프 - 간선이 존재하면 가중치값 / 없으면 0장점O(1)의 시간복잡도 / 단순한 구조단점O(N^2)의 높은 공간복잡도=> 정점의 개수가 정해 저 있을 경우 유리함!class Gr..
힙(Heap), 우선순위 큐(Priority Queue)Heap이란?완전이진트리 형태의 자료구조우선순위큐를 구현하기 위해 사용되는 자료구조여러개의 값 중 최댓값 또는 최솟값을 찾아내는 연산이 빠르다 힙(Heap) : 특정 규칙을 갖는 완전 이진트리최대힙 :부모 노드가 자식 노드보다 항상 크거나 같음최소힙 : 부모 노드가 자식 노드보다 항상 작거나 같음이진트리각 노드가 최대 두개의 자식 노드를 가지는 트리 구조완전 이진 트리 : 말단 노드를 제외하고 모든 노드가 2개의 자식을 갖고있는 이진트리 우선순위 큐우선순위 큐란?Queue는 먼저 들어온 데이터가 나가는 FIFO(선입선출) 형식의 구조우선순위 큐(Priority Queue)는 들어온 순서와는 상관없이 우선순위가 높은 데이터가 먼저 나가는 자료구조우선순..
백트래킹현재상태에서 가능한 모든 후보군을 따라 들어가며 탐색하는 알고리즘어떤 노드의 '유망성'을 판단한뒤, 해당 노드가 유망라지 않으면 부모 노드로 돌아가 다른 자식 노드를 찾는 방법즉, 모든 경우의 수를 찾아보지만, 그 중에서도 가능성만 있는 경우의 수만 찾아보는 방법가능한 모든해를 탐색하면서 유효하지 않은 해가 나오면 되돌아가 다른 해를 찾음재귀를 사용하며, 가지치기(Plunning)을 통해 효율성을 높임해 공간이 매우 커서 전체 탐색이 어려운 탐색문제, 최적화 문제, 제약조건 문제 등에 적용 간혹, 브루트포스와 백트래킹, dfs를 혼동하는 경우가 있다.브루트포스는 '모든 경우의 수' 를 찾아보는것장점은 모든 경우의 수를 탐색하다보니 만족값을 100%찾아낸다하지만 단점은 모든 경우의 수를 판단하는 만..
재귀함수로 문제를 풀던중 너무 큰 값이 들어갔을 때 스택 오버플로우가 발생했다재귀 방식과 유사한 DP방식을 알아볼까한다!중복되는 하위 문제와 최적 부분 구조를 활용하여 문제를 해결 동적 계획법(DP : Dynamic programming)이란?하나의 큰 문제를 여러 개의 작은 문제로 나누고, 같은 문제라면 한 번씩만 풀어 그 결과를 저장해서 다시 큰 문제를 해결할 때 사용) 효율적으로 해결하는 알고리즘 DP사용 방법모든 작은 문제들을한 번만! 풀어야 하는 게 point!정답을 구한 작은 문제를 어딘가에 메모해두어야 함다시 그 보다 큰 문제를 풀어갈 때 똑같은 작은 문제가 나타나면 앞서 메모한 작은 문제의 결과 값을 다시 사용 DP 구성문제분할 : 하나의문제를 작은 하위 문제로 나누어 해결중복계산 방지 :..
투포인터란?- 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘- 정렬되어있는 두 리스트의 합집합에도 사용됨. 병합정렬의 counquer영역의 기초가 되기도 함  특정한 합을 가지는 부분 연속 수열 찾기투포인터의 대표적인 알고리즘 문제어떤 숫자들의 리스트가 주어질 때, 해당 리스트의 연속 수열의 합이 특정 값을 가지는 것을 확인하는 문제 1. 시작점(start)과 끝점(end)이 첫 번째 원소의 인덱스를 가리키도록 한다2. 현재 부분 합이 M과 같다면 카운트한다.3. 현재 부분합이 M 보다 작다면(sum 4. 현재 부분합이 M 보다 크거나 같다면 (sum >= M) start를 1 증가시킨다. ( start++ )   5. 모든 경우를 확인할 때까지 2-4번을 반복한다..
정렬 알고리즘은 데이터를 기준에 맞추어 순서대로 나열하는 것을 목표로 함데이터를 구조화하여 탐색, 비교, 분석 등의 작업을 효과적으로 수행 가능알고리즘의 동작방식과 성능을 이해하고 활용 선택정렬 (Selection Sort)정렬 대상의 데이터 중 가장 작은 데이터를 선택하여 앞으로 위치시키는 정렬 방법시간복잡도 : O(N^2)오름차순 최솟값 선택내림차순 최댓값 선택남은 정렬 부분의 가장 앞에 있는 데이터와 swap 하는 것 매번 작은 최소/ 최대 데이터를 찾는 과정 중 불필요하게 중복되는 연산이 있지만, 구현이 간단ex) 오름차순 정렬이 안된 부분 중 가장 최솟값과 가장 처음 부분이랑 swap코드int[] arr = {5,1,2,8,3}for(int i = 0; i arr[j]){ ..
재귀함수하나의 함수에서 자기 자신을 다시 호출해 작업을 수행하는 알고리즘재귀는 문제를 작은 부분으로 나누어 해결하는 방식에 효과적으로 적용 가능!함수가 자기 자신을 호출하여 문제를 해결하는 방법기본 조건과 재귀 호출로 구성문제를 반복적으로 나누어 해결하는 반복적인 호출 방법으로 효율성에 초점을 두지 않음단순 반복적 문제인 피보나치 수열, 팩토리얼 계산 등 적용 0~N까지의 합 코드package org.example;public class N의합 { public static void main(String[] args) { System.out.println(rec(10)); } public static int rec(int n){ if(n == 0) return 0;..
BFS(Breadth-First Search)너비우선탐색 그래프 완전 탐색 기법 중 하나 - 큐를 이용해서 그래프의 모든 노드 탐색 시작 노드에서 출발 기준으로 가까운 노드를 먼저 방문하면서 탐색하는 알고리즘 큐에 인접한 노드 혹은 노드의 좌표들을 넣어준다 큐가 비었다면? 인접 노드들이 없으므로 탐색이 종료된다기능특징시간복잡도그래프 완전 탐색FIFO(선입선출) 탐색 Queue자료구조 이용O(V + E ) v : 노드 수 E : 에지 수* 경로가 여러개 일 때 최단 경로를 보장 너비우선탐색 핵심이론한번 방문한 노드를 방문하면 안 됨 : 노드 여부를 체크할 배열이 필요그래프 : 인접 리스트큐를 이용한 탐색import java.util.LinkedList; import java.util.Queue; publi..
DFS(Depth-First Search) 깊이우선 탐색 그래프 완전탐색 기법 중 하나 - 스택을 이용해서 그래프의 모든노드 탐색그래프의 시작노드에서 출발 탐색할 한쪽 분기를 정하여 최대 깊이까지 탐색을 마친 후 다른 쪽 분기로 이동하여 탐색하는 알고리즘기능특징시간복잡도그래프 완전 탐색재귀함수로 구현 Stack 자료구조 이용(FILO) - 먼저 들어온 데이터가 나중에 나간다O(V + E )v : 노드 수E : 에지 수* 재귀함수 : 스택 오버플로 유의  깊이우선탐색 핵심이론한번 방문한 노드를 방문하면 안됨 : 노드 여부를 체크할 배열이 필요그래프 : 인접리스트후입선출의 특징 가지고 있음 / 스택을 이용한 탐색public class Dfs { public static void main(String[]..
jjuya 개발 기록
'Algorithm/알고리즘 이론' 카테고리의 글 목록💕