BACKEND/Data Structure & Algorithm 19

재귀 알고리즘 기초 이해하기

재귀란? 어떤 사건이 자기 자신을 포함하고 있거나 또는 자기 자신을 사용하여 정의하고 있을 때 이를 재귀적(recursive)이라고 합니다. 재귀적 정의를 사용하여 무한으로 존재하는 자연수를 정의한다면 - 1은 자연수입니다. - 자연수 n의 바로 다음 정수도 자연수입니다. 재귀를 효과적으로 사용하면 이런 정의뿐만 아니라 프로그램도 간결하게 작성할 수 있습니다. 팩토리얼 구하기. 재귀를 사용한 예로 가장 먼저 음이 아닌 정수의 팩토리얼(factorial) 값을 구하는 프로그램을 살펴봅시다. 음이 아닌 정수 n의 팩토리얼은(n!) 다음과 같이 재귀적으로 정의할 수 있습니다. - 0! = 1 - n > 0 이면 n! = n * (n-1)! 즉, 5! 은 5 * 4! 이고 4! 은 4 * 3! 입니다. impo..

스택과 큐 - 스택이란?

스택(Stack)이란? 스택은 데이터를 일시적으로 쌓아놓는 자료구조로 데이터의 입력과 출력 순서는 후입선출(LIFO) 입니다. 가장 나중에 넣은 데이터를 가장 먼저 꺼냅니다. 스택에 데이터를 넣는 작업을 push라고 하며 꺼내는 작업을 pop이라고 합니다. 가장 상단의 값을 top이라고 하고 가장 아랫부분은 bottom이라고 합니다. 자바 프로그램이 실행 될 때도 이와 같은 방식으로 스택 구조에 의해 함수가 실행됩니다. 스택 만들기. 고정 길이 스택을 만들어 필드, 생성자, 메서드 순으로 살펴봅시다. package june2023.day11.stack; import java.util.Scanner; class IntStack { private int[] stack; private int capacity;..

검색 알고리즘과 선형 검색, 이진 검색

데이터 집합에서 원하는 값을 가진 요소를 찾아내는 검색 알고리즘을 알아보자. 검색 알고리즘이란? 검색 알고리즘은 주어진 데이터 집합에서 특정 값을 찾는 과정을 수행하는 알고리즘입니다. 일반적으로 데이터가 정렬되어 있는 경우와 그렇지 않은 경우에 따라 다른 알고리즘이 사용됩니다. 검색 알고리즘은 다양한 방법으로 구현될 수 있으며, 효율성과 정확성을 고려하여 선택됩니다. 일반적으로 사용되는 검색 알고리즘으로는 선형 검색(Linear Search), 이진 검색(Binary Search), 해시 검색(Hash Search) 등이 있습니다. 선형 검색(Linear Search): 데이터를 처음부터 끝까지 순차적으로 탐색하여 원하는 값을 찾는 알고리즘입니다. 데이터가 정렬되어 있지 않은 경우에도 사용할 수 있지만,..

기본 자료구조 - 배열이란

자료구조 정의하기. 배열을 공부하기 위해서 자료구조가 무엇인지 간단히 알아야 합니다. 자료구조란 데이터 단위와 데이터 자체 사이의 물리적 또는 논리적인 관계 쉽게 말해 자료를 효율적으로 사용할 수 있도록 컴퓨터에게 저장하는 방법을 말합니다. 자료구조는 데이터를 효율적으로 조직화하고 저장하고 처리하는 방법을 다루는 컴퓨터 과학의 학문 분야이며 데이터의 특성과 연산의 효율성을 고려하여 데이터를 구성하고 저장하는 방법을 설계하며, 데이터의 접근, 삽입, 삭제, 검색 등의 연산을 수행하기 위한 알고리즘을 개발합니다. 자료구조는 다양한 형태로 구현될 수 있으며, 각각의 자료구조는 특정한 상황에서 효율적인 동작을 보장합니다. 예를 들어, 배열은 데이터에 연속적인 메모리 공간을 할당하여 인덱스를 통해 데이터에 접근하..

기초수학 - 조합(Combination)

조합(Combination). 조합(Combination)은 주어진 원소들 중에서 일부를 선택하여 만들어지는 모든 경우의 수를 구하는 것을 말합니다. 조합은 순서가 중요하지 않으며, 중복된 원소를 포함하지 않습니다. 일반적으로 조합은 "n 개 중에서 r 개를 선택하는 경우의 수"를 나타내는 nCr로 표기됩니다. 조합을 구하는 방법에는 여러 가지 방법이 있지만, 가장 일반적인 방법은 재귀적으로 구현하는 것입니다. 재귀적인 방법을 사용하면 간결하고 직관적으로 조합을 구할 수 있습니다. - 서로 다른 n개 중에서 r개를 선택하는 경우의 수 (순서 X, 중복 X) case1. 서로 다른 4명 중 주번을 2명 뽑는 방법 public class CombinationTest1 { public static void m..

기초수학 - 순열(Permutation)

시작하며. 순열은 코딩 테스트에서 여러가지 유형으로 응용되어 나온다. 개념을 확실히 알고 넘어가기 위해 정리하고자 한다. 순열을 이해하기 전에 팩토리얼을 먼저 알아보자. 팩토리얼(Factorial). 팩토리얼은 양의 정수 n에 대해 1부터 n까지의 모든 정수를 곱한 값 n 팩토리얼은 n!으로 표기한다. // 1에서 n까지의 모든 자연수의 곱 (n!) 1! = 1 2! = 2 X 1 3! = 3 X 2 X 1 n! = n(n-1)(n-2) ... X 1 public class Permutation0603 { public static void main(String[] args) { // 팩토리얼 int n = 5; int result = 1; // 반복문으로 구현하기 for (int i = 1; i = n ..

기초수학 - 경우의 수 : 합의법칙, 곱의법칙, 약수, 최대공약수, 최소공배수)

경우의 수. 어떤 사건에서 일어날 수 있는 경우의 가짓수로 동전을 던졌을 때 나올 수 있는 가짓수는 2, 주사뤼를 던졌을 때 나올 수 있는 가짓누는 6이다. 사건 A가 일어날 경우의수는 n(A)로 표기하고 크게 순열, 조합, 중복순열 등이 있다. 경우의 수는 주어진 문제나 상황에 따라 다양한 방법으로 계산될 수 있고 게임 이론, 알고리즘 설계, 조합 최적화, 확률과 통계 등 다양한 분야에서 사용된다. 합의 법칙. 합의 법칙은 두 개 이상의 상호 배반적인 사건(이벤트)의 경우의 수를 더하여 전체 경우의 수를 계산하는 원리다. 즉, 두 사건이 동시에 발생하지 않을 때, 두 사건 중 하나가 발생하는 경우의 수는각각의 경우의 수를 더하여 구할 수 있으며 사건 A 또는 사건 B가 일어날 경우의 수는 합집합으로 표..

기초수학 - 집합(Set)

집합(Set). 기초 수학에서 집합은 (특정조건에 맞는)원소들의 모임을 의미합니다. 집합은 중복되지 않는 원소들로 구성되며, 순서는 중요하지 않습니다. 집합은 중괄호{}로 표현되며, 각 원소는 쉼표로 구분됩니다. 집합을 표현하는 방법으로는 원소나열법, 조건제시법, 벤 다이어그램이 있습니다. 집합에 대해 알아보며 이를 자바 코드로 구현해봅시다. 집합 표현 방법. 원소나열법 A = {1, 2, 3, 4, 5}, B = {2, 4, 6, 8, 10} 조건제시법 A = {A | A는 정수, 1 ≦ A ≦ 5 } B = {2B | B는 정수, 1 ≦ B ≦ 5} 벤 다이어그램 교집합. 두 집합이 공통으로 포함하는 원소로 이루어진 집합 A ∩ B = { 𝑥 | 𝑥 ∈ A and 𝑥 ∈ B } 합집합. 어느 하나에라..

비선형 자료구조 - 이진 탐색 트리 (Binary Search Tree) 정의 및 탐색, 삽입, 삭제 구현

시작하며. 앞서 트리가 무엇인지 이진 트리는 무엇인지 이진 트리의 성격에 따라 포화 이진 트리, 완전 이진 트리, 정 이진 트리, 편향 이진 트리 등등 어떤 종류가 있는지 그리고 어떻게 순회할 수 있는지 등을 알아봤습니다. 오늘은 이진 트리의 종류 중 하나인 이진 탐색 트리에 알아보며 데이터를 삽입하고 삭제하는 방법도 정리하고자 합니다. 이진 탐색 트리(Binary Search Tree, BST)를 알아야 하는 이유 탐색 효율성: 이진 탐색 트리는 데이터를 효율적으로 탐색할 수 있는 구조입니다. 각 노드는 특정한 값을 가지고 있으며, 왼쪽 서브트리에는 작은 값의 노드가, 오른쪽 서브트리에는 큰 값의 노드가 위치합니다. 이를 통해 탐색 시 비교를 통해 탐색 범위를 반씩 줄여나가므로, 탐색 속도가 빠릅니다...

비선형 자료구조 - 이진 트리(Binary Tree) 구현과 순회

이진 트리 구현. 배열 : 레벨 순회 순으로 배열에 구성 연결 리스트 : 값과 간선을 관리하기 위한 연결리스트 구성 이진 트리의 순회(Traversal). 모든 노드를 빠뜨리거나 중복하지 않고 방문하는 연산 전위/중위/후위 순회, 레벨순회로 분류할 수 있다. 전위 순회(preorder traversal) 순서 : 부모 노드 → 왼쪽 서브트리 → 오른쪽 서브트리 순서로 노드를 방문 경로 : A → B → D → H → I → E → J → C → F → G 1. 현재 노드 A 출력 → A의 왼쪽 노드 B 출력 → B의 왼쪽 노드 D 출력 → D의 왼쪽 노드 H 출력 (하위 노드 없음) 2. D의 오른쪽 노드 I 출력 → B의 오른쪽 노드 E 출력 -> E의 왼쪽 노트 J 출력 (하위 노드 없음) 3. A의..