
🌵이분 탐색(Binary Search) 이란? - 정렬되어 있는 리스트(배열)에서 탐색 범위를 절반씩 좁혀가며 원하는 값(target)을 탐색하는 방법 - 이 때 리스트(배열)는 항상 정렬되어 있어야 한다 시간 복잡도 : O(log n) 🌵문제 해결 방법 이분 탐색 알고리즘은 변수 3개 (start, mid, end)를 사용해 값을 탐색 간단하게 말하면 찾으려는 데이터와 중간점 위치에 있는 데이터를 반복적으로 비교해서 원하는 데이터를 찾는 것이 이분 탐색의 과정 변수 이름에서도 알 수 있듯, start의 초기 값은 리스트(배열) 시작 위치 (0) mid 는 start와 end의 중간 지점 ((start + end) // 2) end 는 리스트(배열) 마지막 위치 (len(list) - 1) 1. 리스트(..

🌵 Hash Function (해시 함수) 또는 Hash Algorithm (해시 알고리즘) 임의의 길이의 데이터(key)를 고정된 길이의 데이터(hash)로 매핑하는 함수 이 과정을 hashing이라 한다. 즉, 해시 함수 : key (Input) -> Hash (Output) 이때의 Hash는 저장 위치가 된다. 🌵 Hash Table (해시 테이블) 또는 Hash Map (해시 맵) 해시값을 주소 또는 색인 삼아 데이터(value)를 key와 함께 저장하는 자료구조이다. 파이썬의 딕셔너리(dictionary) 자료형은 해시 테이블로 구현되어 있다. 장점 해시 테이블은 key-value가 1:1로 매핑되어 있기 때문에 삽입, 삭제, 검색의 과정에서 모두 평균적으로 O(1)의 시간 복잡도를 가지고 있다..

🌵 시간 복잡도(Time Complexity)란? 컴퓨터 과학에서 시간복잡도(Time complexity)란 프로그램의 입력값과 연산 수행 시간의 상관관계를 나타내는 척도이다. 일반적으로 알고리즘의 시간복잡도는 Big-O 표기법을 사용한다. 🌵 시간 복잡도가 필요한 이유는? 효율적인 알고리즘 구현 - 시간초과를 줄일 수 있다. - 효율적인 알고리즘을 구현한다는 것은 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화 한다는 것이다. 다양한 자료형 사용 - list, set, dictionary와 같은 자료형들을 목적에 맞게 사용할 수 있다. 🌵 Big-O 표기법 Big-O 표기법은 알고리즘 효율성을 상한선 기준으로 표기한다. 즉, 최악의 경우를 고려하기 때문에 프로그램이 실행되는 과정에서 소요되는 최악의..

🌵 브루트포스 알고리즘(Brute Force Search)이란? brute : 무식한 + force : 힘 brute force : 폭력 완전 탐색, 전체 탐색 알고리즘으로 불리며, 발생할 수 있는 모든 경우를 탐색한다. 쉽게 말해 4자리 비밀번호를 맞추기 위해 브루트포스 알고리즘을 사용하면, 0000부터 9999까지의 모든 숫자조합을 시도해 비밀번호를 찾는 것이다. 🌵 장점 EASY - 알고리즘을 설계, 구현하기가 매우 쉽다. 정답률 100% - 해가 하나 이상 존재한다는 가정을 세우고 구현하므로, 100%의 확률로 정답을 찾을 수 있다. 🌵 단점 시간 초과 가능성 - 모든 경우를 탐색하므로 실행시간이 오래걸린다. 비효율적 - 메모리 효율측면에서 비효율적이다. 🌵 종류 브루트포스의 종류는 크게 두 가지..

🌵순열이란? - 서로 다른 n개중에 r개를 선택하는 경우의 수 - 순서 상관 있음 - 즉, [0,1]과 [1,0]이 서로 다른 경우를 의미 🌵조합이란? - 서로 다른 n개중에 r개를 선택하는 경우의 수 - 순서 상관 없음 - 즉, [0,1]과 [1,0]이 서로 같은 경우를 의미 🌵중복 순열이란? - 중복 가능한 n개중에서 r개를 선택하는 경우의 수 - 순서 상관 있음 🌵중복 조합이란? - 중복 가능한 n개중에서 r개를 선택하는 경우의 수 - 순서 상관 없음 🌵같은 것이 있는 순열? - (나열하는 원소의 팩토리얼) 나누기 (중복된 원소들의 팩토리얼) - ex> aaabb = 5! / (3! * 2!) 🌵원 순열이란? - 원 모양의 테이블에 n개의 원소를 나열하는 하는 경우의 수 🥑 관련 문제 🥑 1. 백준..