레인보우 테이블
·
Hack&Dev/암호학
🔐 1. 해시(Hash) 값이란?1.1 개념 정의해시(Hash)란 임의의 길이를 가진 데이터를 고정된 길이의 문자열로 변환하는 암호학적 함수이다.결과로 생성된 문자열을 해시 값(Hash Value) 또는 다이제스트(Digest)라고 부른다. 1.2 특징단방향성(One-way)원래의 데이터를 해시 값으로 변환하는 것은 쉽지만,해시 값으로부터 원래 데이터를 역산하는 것은 거의 불가능하다.충돌 저항성(Collision Resistance)서로 다른 두 입력값이 같은 해시 값을 가지지 않도록 한다.변경 민감성(Avalanche Effect)입력값이 조금만 바뀌어도 해시 값은 크게 바뀐다. 1.3 주요 해시 알고리즘MD5128비트 해시 값을 생성. 현재는 보안 취약성으로 인해 잘 사용되지 않음.SHA-116..
하노이탑 문제
·
Language/알고리즘
1. C언어 코드#include // 하노이탑 함수void hanoi(int n, char from, char to, char via) { if (n == 1) { printf("원판 1을 %c에서 %c로 이동\n", from, to); return; } // 1단계: n-1개를 보조 기둥(via)로 이동 (to는 목표지만 잠깐 보조 역할) hanoi(n - 1, from, via, to); // 2단계: 가장 큰 원판 1개를 목적지(to)로 이동 printf("원판 %d을 %c에서 %c로 이동\n", n, from, to); // 3단계: n-1개를 보조 기둥에서 목적지로 이동 (from은 이제 보조 역할) hanoi(n - 1, vi..
sorted() 함수의 key=lambda 사용해서 정렬하기
·
Language/Python
1. 파이썬 sorted() 함수와 key=lambda를 이용한 정렬파이썬에서 sorted() 함수는 반복 가능한(iterable) 객체를 정렬하여 새로운 리스트로 반환하는 함수이다.정렬 기준을 사용자 정의하고 싶을 때 key 인자에 lambda 함수를 사용하면 매우 유용하다. 1.1 기본 구조sorted(iterable, key=None, reverse=False)iterable리스트, 튜플 등 반복 가능한 객체key각 요소에서 정렬 기준이 되는 값을 추출하는 함수 (보통 lambda 사용)reverseTrue이면 내림차순, False이면 오름차순 (기본값) 1.2 lambda를 활용한 정렬1.2.1 기본 사용 예시numbers = [5, 2, 9, 1, 7]sorted_numbers = sorted..
유클리드 호제법, GCD, LCM
·
Language/알고리즘
1. 개념1.1 최대공약수(GCD)두 수 이상이 공통으로 가지는 약수 중 가장 큰 수예: gcd(12, 18) = 6 1.2 최소공배수(LCM)두 수 이상의 공통 배수 중 가장 작은 수예: lcm(12, 18) = 36 2. 유클리드 호제법2.1 정의두 수 a,b의 최대공약수는 a를 b로 나는 나머지 r과 b의 최대공약수와 같다는 성질을 이용한다.gcd(a,b)=gcd(b, a mod b) 2.2 예시gcd(48, 18)→ gcd(18, 48 % 18 = 12)→ gcd(12, 18 % 12 = 6)→ gcd(6, 12 % 6 = 0)→ 결과: 6나머지가 0이 되는 순간의 나눈 수가 GCD이다. 3. 최소공배수3.1 정의두 수를 곱한 다음, 겹치는 부분을 뺀다.하지만 두 수를 그냥 곱하면 공통으로 ..
계수 정렬
·
Language/알고리즘
1. Counting Sort (계수 정렬)1.1 계수 정렬이란?계수 정렬(Counting Sort)은 정렬할 숫자의 빈도를 계산하여 정렬하는 비교 연산 없는 정렬 알고리즘이다.주어진 범위 내에서 정수 값을 직접 배열의 인덱스로 활용하여 O(n + k)의 시간 복잡도로 동작한다. 1.2 알고리즘 개념최댓값(또는 범위) 찾기정렬할 배열에서 최댓값을 찾아 카운트 배열 크기를 결정한다.카운트 배열 생성 및 초기화각 숫자의 빈도를 저장할 count[] 배열을 0으로 초기화한다.카운트 배열에 빈도 저장입력된 각 숫자의 개수를 count[num]++ 방식으로 기록한다.누적 합을 이용해 정렬된 위치 계산 (필요할 경우)count[] 배열을 누적 합으로 변환하여, 각 숫자의 정렬된 위치를 확인한다.출력 배열에 정렬된 ..
소수 판별 알고리즘: 제곱근 최적화 방식
·
Language/알고리즘
1. 소수 판별 알고리즘: 제곱근 최적화 방식1.1 개요소수(Prime Number)란 1보다 큰 자연수 중 1과 자기 자신 외에는 약수가 없는 수를 의미한다.효율적인 소수 판별 알고리즘은 수학 및 프로그래밍 문제를 해결할 때 자주 사용되며,특히 에라토스테네스의 체, 밀러-라빈 알고리즘 등과 함께 핵심적인 알고리즘 중 하나이다.이번 글에서는 가장 기본적이면서도 효율적인 방법 중 하나인 ‘제곱근을 이용한 소수 판별 알고리즘’을 설명하고,코드와 함께 그 동작 원리를 분석한다. 1.2 알고리즘 원리1.2.1 기본 아이디어어떤 정수 x가 소수인지 확인하려면, 2부터 x - 1까지 모든 수로 나누어 떨어지는지를 확인할 수 있다.하지만 이는 매우 비효율적이다.소수 판별의 효율성을 높이기 위해, x의 제곱근(√x)..
list()함수
·
카테고리 없음
1. list() 함수list() 함수는 파이썬의 내장 함수이며, 주로 다른 iterable 객체를 리스트(list)로 변환할 때 사용한다. 1.1 함수 정의list([iterable])매개변수:iterable : 반복 가능한 객체 (string, tuple, set, dict, range, generator 등)반환값:iterable의 요소들을 포함한 새로운 리스트 객체생략 가능:iterable을 생략하면 빈 리스트 []를 반환한다. 1.2 주요 사용 예제1.2.1 문자열 → 리스트list("abc") # ['a', 'b', 'c']각 문자 하나하나를 요소로 변환한다. 1.2.2 튜플 → 리스트list((1, 2, 3)) # [1, 2, 3]튜플을 리스트로 변환한다. 1.2.3 세트 → 리스트li..
index() 함수
·
Language/Python
1. 파이썬 index() 함수index() 함수는 리스트(List), 튜플(Tuple), 문자열(String) 등의 시퀀스 자료형에서 특정 값의 첫 번째 위치(인덱스)를 반환하는 함수이다. 1.1 기본 문법시퀀스.index(찾을값, 시작인덱스(옵션), 끝인덱스(옵션))찾을값 : 시퀀스 내에서 찾고자 하는 값이다.시작인덱스 : 탐색을 시작할 위치이며 기본값은 0이다.끝인덱스 : 탐색을 종료할 위치이며 기본값은 시퀀스의 끝이다. 1.1.1 반환값찾는 값이 존재하면 해당 값이 처음 등장하는 위치(인덱스)를 반환한다.찾는 값이 없으면 ValueError 예외가 발생한다. 1.2 예제1.2.1 리스트에서 사용 예시fruits = ['apple', 'banana', 'cherry', 'banana']index_..
Python deque
·
Language/알고리즘
1. deque1.1 deque 개요deque는 collections 모듈에서 제공되는 자료구조로,양쪽 끝에서 삽입과 삭제가 모두 가능한 큐(Double-Ended Queue)이다.리스트(list)보다 양끝 삽입/삭제 연산에서 시간복잡도가 우수하여 성능적으로 효율적인 경우가 많다.from collections import deque  1.2 deque의 주요 특징1.2.1 양방향 입출력 지원리스트는 pop(0)처럼 앞에서 제거 시 O(n) 시간이 걸리는 반면,deque는 O(1)의 시간 복잡도로 앞에서도 빠르게 처리할 수 있다. 1.2.2 내부적으로 연결 리스트(혹은 블록 연결 배열)로 구현메모리 재할당이 자주 발생하는 list에 비해, deque는 안정적인 삽입/삭제 속도를 제공한다. 1.2.3 thr..