알고리즘
-
🔷 넓이 우선 탐색(BFS, Breadth-First Search)란? 시작 노드에서 시작해서 다음 분기(branch)로 넘어가기 전에 인접한 노드를 완벽하게 탐색하는 방법이다. 아직 방문하지 않은 노드를 시작점으로 인접 노드를 계속 탐색한다. 완벽하게 탐색을 한 상태가 되면(인접 노드를 다 방문한 후) 다음 분기로 넘어간다. 🔷 넓이 우선 탐색의 특징 🔹비순환 알고리즘 깊이 우선 탐색과 달리 재귀 방식으로 작동하지 않는다. 🔹비직관적 넓게 퍼지면서 검색하는 방식으로 직관직이지 않다. 🔹선입선출 (FIFO) 방문한 노드들을 차례로 저장한 후 꺼낼 수 있는 자료 구조인 큐(Queue)를 사용한다. 🔹 Queue 게시글 확인하기 🔹방문 여부 확인 모든 노드를 방문하여 방문 여부를 확인해야한다. 미확인 시 무..
[Kotlin] 넓이 우선 탐색 - BFS, Breadth-First Search🔷 넓이 우선 탐색(BFS, Breadth-First Search)란? 시작 노드에서 시작해서 다음 분기(branch)로 넘어가기 전에 인접한 노드를 완벽하게 탐색하는 방법이다. 아직 방문하지 않은 노드를 시작점으로 인접 노드를 계속 탐색한다. 완벽하게 탐색을 한 상태가 되면(인접 노드를 다 방문한 후) 다음 분기로 넘어간다. 🔷 넓이 우선 탐색의 특징 🔹비순환 알고리즘 깊이 우선 탐색과 달리 재귀 방식으로 작동하지 않는다. 🔹비직관적 넓게 퍼지면서 검색하는 방식으로 직관직이지 않다. 🔹선입선출 (FIFO) 방문한 노드들을 차례로 저장한 후 꺼낼 수 있는 자료 구조인 큐(Queue)를 사용한다. 🔹 Queue 게시글 확인하기 🔹방문 여부 확인 모든 노드를 방문하여 방문 여부를 확인해야한다. 미확인 시 무..
2023.09.04 -
🔷 깊이 우선 탐색(DFS, Depth-First Search)란? 시작 노드에서 시작해서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법이다. 아직 방문하지 않은 노드를 시작점으로 각 분기를 계속 탐색한다. 완벽하게 탐색을 한 상태가 되면(분기에 노드를 다 방문한 후) 다음 분기로 넘어간다. 🔷 깊이 우선 탐색의 특징 🔹순환 알고리즘 자기 자신을 호출하는 순환 알고리즘의 형태를 가진다. 🔹전위 운행 (Pre-Order Travels) 시작 노드에서 아직 방문이 안 된 인접 분기로 넘어가는 형태는 전위 운행 트리 탐색 방법과 유사하다. 🔹방문 여부 확인 모든 노드를 방문하여 방문 여부를 확인해야한다. 미확인 시 무한 루프에 빠질 수 있다. 🔷 구현 🔹코틀린 (Kotlin) /..
[Kotlin] 깊이 우선 탐색 - DFS, Depth-First Search🔷 깊이 우선 탐색(DFS, Depth-First Search)란? 시작 노드에서 시작해서 다음 분기(branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법이다. 아직 방문하지 않은 노드를 시작점으로 각 분기를 계속 탐색한다. 완벽하게 탐색을 한 상태가 되면(분기에 노드를 다 방문한 후) 다음 분기로 넘어간다. 🔷 깊이 우선 탐색의 특징 🔹순환 알고리즘 자기 자신을 호출하는 순환 알고리즘의 형태를 가진다. 🔹전위 운행 (Pre-Order Travels) 시작 노드에서 아직 방문이 안 된 인접 분기로 넘어가는 형태는 전위 운행 트리 탐색 방법과 유사하다. 🔹방문 여부 확인 모든 노드를 방문하여 방문 여부를 확인해야한다. 미확인 시 무한 루프에 빠질 수 있다. 🔷 구현 🔹코틀린 (Kotlin) /..
2023.09.03 -
🔷 선택 정렬 (Selection Sort)이란? 가장 작은 수(혹은 가장 큰 수)를 찾아 첫 번째 위치(혹은 마지막 위치)의 수와 교환하는 방식의 정렬 방법이다. 조건에 충 족하는 데이터와 변경할 위치의 데이터를 선택하여 변경한다. 데이터를 정렬하기 위하여 추가적인 데이터가 필요하지 않기에 '제자리 정렬(in-place sort)'로 분류되기도 한다. 🔷 버블 정렬의 장점 🔹교환 횟수 최소화 변경 위치는 미리 정해져있고 부합하는 데이터를 찾아 변경하는 방식으로 교환 횟수는 최소화된다. 🔹적은 메모리 정렬을 위하여 추가적인 메모리를 사용하지 않는다. 🔷 버블 정렬의 단점 🔹비교 횟수 증가 각 위치에 맞는 데이터를 찾기 위하여 매번 데이터를 비교해야한다. 🔹안정성 값이 같은 데이터가 존재하는 경우 상대적인..
[Kotlin] 선택 정렬 - Selection Sort🔷 선택 정렬 (Selection Sort)이란? 가장 작은 수(혹은 가장 큰 수)를 찾아 첫 번째 위치(혹은 마지막 위치)의 수와 교환하는 방식의 정렬 방법이다. 조건에 충 족하는 데이터와 변경할 위치의 데이터를 선택하여 변경한다. 데이터를 정렬하기 위하여 추가적인 데이터가 필요하지 않기에 '제자리 정렬(in-place sort)'로 분류되기도 한다. 🔷 버블 정렬의 장점 🔹교환 횟수 최소화 변경 위치는 미리 정해져있고 부합하는 데이터를 찾아 변경하는 방식으로 교환 횟수는 최소화된다. 🔹적은 메모리 정렬을 위하여 추가적인 메모리를 사용하지 않는다. 🔷 버블 정렬의 단점 🔹비교 횟수 증가 각 위치에 맞는 데이터를 찾기 위하여 매번 데이터를 비교해야한다. 🔹안정성 값이 같은 데이터가 존재하는 경우 상대적인..
2023.09.01 -
🔷 범위 지정 함수란? Coerce는 '강제로 무언가를 하게 하다'라는 뜻이 있다. 내포하는 단어의 뜻처럼 어떠한 범위를 강제로 지정하여 결과값을 도출하는 함수이다. 범위 지정 함수는 "어떠한 영역을 지정하고 내부에서 작동하는 함수"이다. 대표적으로 [ let, with, run, apply, also] 함수가 있다. * 추가 포스팅 예정 🔷 coerceIn 🔹구조 객체가 해당 범위에 있을 경우 해당 값을, 존재하지 않을 경우 경계값(범위의 최소값 혹은 최대값)을 반환 (객체).corerceIn(범위) - 객체로 확인할 값을 지정한다. - 메소드를 적용한다. : coerceIn() - 메소드의 인자값으로 범위를 지정한다. : coerceIn(a..b) / coerceIn(a, b) *a는 범위 내 최소값..
[Kotlin] 범위 지정 함수 - coerceIn, coerceAtMost, coerceAtLeast🔷 범위 지정 함수란? Coerce는 '강제로 무언가를 하게 하다'라는 뜻이 있다. 내포하는 단어의 뜻처럼 어떠한 범위를 강제로 지정하여 결과값을 도출하는 함수이다. 범위 지정 함수는 "어떠한 영역을 지정하고 내부에서 작동하는 함수"이다. 대표적으로 [ let, with, run, apply, also] 함수가 있다. * 추가 포스팅 예정 🔷 coerceIn 🔹구조 객체가 해당 범위에 있을 경우 해당 값을, 존재하지 않을 경우 경계값(범위의 최소값 혹은 최대값)을 반환 (객체).corerceIn(범위) - 객체로 확인할 값을 지정한다. - 메소드를 적용한다. : coerceIn() - 메소드의 인자값으로 범위를 지정한다. : coerceIn(a..b) / coerceIn(a, b) *a는 범위 내 최소값..
2023.08.28 -
🔷 버블 정렬 (Bubble Sort)이란? 거품이 터지면서 위로 올라오듯이 값을 하나씩 비교하며 올라오는 정렬이다. 인접한 두 값을 비교하며 값을 정렬한다. 값을 비교하면서 정렬하기 때문에 '비교 정렬'이라고도 부른다. 데이터를 정렬하기 위하여 추가적인 데이터가 필요하지 않기에 '제자리 정렬(in-place sort)'로 분류되기도 한다. 🔷 버블 정렬의 장점 🔹쉬운 난이도 구현이 간단하다. 🔹적은 메모리 정렬을 위하여 추가적인 메모리를 사용하지 않는다. 🔷 버블 정렬의 단점 🔹교환 낭비 가장 큰 값이 가장 왼쪽에 있을 때 맨 끝으로 이동하기 위해서는 모든 값과 비교되어 올라가야한다. 혹은, 가장 큰 값이 이미 맨 끝으로 정렬되어 있어도 교환을 확인하는 상황이 생길 수 있다. 🔷 시간 복잡도 🔹최악의 ..
[Kotlin] 버블 정렬 - Bubble Sort🔷 버블 정렬 (Bubble Sort)이란? 거품이 터지면서 위로 올라오듯이 값을 하나씩 비교하며 올라오는 정렬이다. 인접한 두 값을 비교하며 값을 정렬한다. 값을 비교하면서 정렬하기 때문에 '비교 정렬'이라고도 부른다. 데이터를 정렬하기 위하여 추가적인 데이터가 필요하지 않기에 '제자리 정렬(in-place sort)'로 분류되기도 한다. 🔷 버블 정렬의 장점 🔹쉬운 난이도 구현이 간단하다. 🔹적은 메모리 정렬을 위하여 추가적인 메모리를 사용하지 않는다. 🔷 버블 정렬의 단점 🔹교환 낭비 가장 큰 값이 가장 왼쪽에 있을 때 맨 끝으로 이동하기 위해서는 모든 값과 비교되어 올라가야한다. 혹은, 가장 큰 값이 이미 맨 끝으로 정렬되어 있어도 교환을 확인하는 상황이 생길 수 있다. 🔷 시간 복잡도 🔹최악의 ..
2023.08.28 -
🔷 꼬리 재귀 함수 (tailrec)이란? 재귀 함수를 구현할 때 마지막(Tail)에 자기 자신을 호출(Recursion)하는 형태의 함수이다. 반환 값 : 호출 당한 함수의 결과 → 호출한 함수의 결과 🔹재귀 함수 재귀 함수는 '자기 자신을 호출하는 함수'이다. 구조는 비슷하지만 더 작은 문제로 쪼갤 수 있는 문제를 풀 때 유용한 접근 방법이다. 함수는 호출될 때마다 함수의 입력값(매개변수), 결과값(리턴값), 리턴 후 돌아갈 위치 등이 스택(Stack)에 보관된다. 재귀 함수는 '자기 자신을 호출'을 여러번 반복하여 콜 스택이 깊어질 수록 메모리 오버헤드 (스택 오버 플로우 stack overflow) 현상을 일으킬 수 있다. 🔹재귀의 특징 - 무한 루프에 빠지지 않기 위해 일정한 탈출 조건이 있어야..
[Kotlin] 꼬리 재귀 함수 - tailrec🔷 꼬리 재귀 함수 (tailrec)이란? 재귀 함수를 구현할 때 마지막(Tail)에 자기 자신을 호출(Recursion)하는 형태의 함수이다. 반환 값 : 호출 당한 함수의 결과 → 호출한 함수의 결과 🔹재귀 함수 재귀 함수는 '자기 자신을 호출하는 함수'이다. 구조는 비슷하지만 더 작은 문제로 쪼갤 수 있는 문제를 풀 때 유용한 접근 방법이다. 함수는 호출될 때마다 함수의 입력값(매개변수), 결과값(리턴값), 리턴 후 돌아갈 위치 등이 스택(Stack)에 보관된다. 재귀 함수는 '자기 자신을 호출'을 여러번 반복하여 콜 스택이 깊어질 수록 메모리 오버헤드 (스택 오버 플로우 stack overflow) 현상을 일으킬 수 있다. 🔹재귀의 특징 - 무한 루프에 빠지지 않기 위해 일정한 탈출 조건이 있어야..
2023.08.21