[알고리즘] 백트래킹(Backtracking)
·
공부/알고리즘
☑️ 백트래킹(Backtracking)해를 찾다가 더 이상 진행할 수 없으면, 다시 뒤로(Back) 돌아가서 해를 찾는 방법을 의미한다.수학과 친하지 않기 때문에 다른 방식으로 설명하면 모든 조합의 수를 탐색하지만, 조건이 맞는 경우만 탐색한다. 조건에 부합하지 않으면 제외한다.  ☑️ DFS / BFS랑은 무슨 관계인가?백트래킹에 관련된 키워드로 DFS와 BFS를 들을 수 있다. 백트래킹 알고리즘은 DFS와 BFS 알고리즘과 무슨 관계에 있을까? 별 것 없다. DFS와 BFS 알고리즘을 통해서 백트래킹을 구현할 수 있다. 백트래킹은 일종의 추상적인 개념과 같다면, DFS와 BFS는 추상적인 개념을 기법으로 정의해둔 것이다. 우리가 여기까지 알았다면 이제 이렇게 말할 수 있다.아! 백트래킹 문제니까 DF..
[알고리즘] 재귀란 무엇인가?
·
공부/알고리즘
☑️ 재귀란 무엇인가?드디어 블로그에 재귀를 포스팅한다. 짧은 크래프톤 정글 기간에 나를 많이 괴롭혔던 이론이다. 재귀란 무엇인가? 간단하고 쉽다. 재귀는 자기 자신을 참조하는 알고리즘이다. 어? 자기 자신을 참조한다고? 이게 무슨 의미지? 싶다면 아래 사진을 보자. 재귀의 이론 자체는 어렵지 않다. 정말 그대로 자기 자신을 참조하는 알고리즘이 전부이기 때문이다. 사실 프로그래머는 코드로 이해하는 게 더 빠를 수 있다. 바로 팩토리얼을 구하기 위해서 재귀를 사용한 예시를 보자.def factorial(a : int) -> int: if a  팩토리얼은 정수 1부터 N까지 곱한 연산을 결과로 반환한다. 수학적으로는 다음과 같이 표기하고 연산한다.5! (5 팩토리얼) // 5 * 4 * 3 * 2 * ..
[자료구조] 배열이란 무엇인가?
·
공부/자료구조
☑️ 배열이란 무엇인가?배열은 연속된 자료구조(Contiguous Data Structures)를 가지는 대표적인 예시다. 연속된 자료구조는 단일 메모리 청크에 모든 원소를 저장하며, 모든 원소의 접근 소요 시간은 일정하게 O(1)을 가진다. 또, 연속된 자료구조의 특징으로 캐시 지역성(Cache Locality)이 있는데, 이는 연속된 자료구조의 특성 상, 원소와 원소가 인접하기 때문에 주변 원소에 접근할 때 빠르게 접근할 수 있도록 원소 하나를 가져올 때, 주변 원소를 캐쉬(Cache)에 가져오는 것이다. 위의 설명한 특성들로 인해서 배열의 원소들은 각자 같은 크기의 메모리 공간을 가지는데, 이 공간들은 연속성을 가진다. 그렇기 때문에 다음과 같은 수식을 통해서 인덱스의 위치를 찾을 수 있다.배열 원..
[알고리즘] #1. A* 알고리즘을 알아보자
·
공부/알고리즘
01. A* 알고리즘이란?A* 알고리즘은 경로 값과 휴리스틱 값을 사용해서 최단 경로를 탐색한다. Dijkstra 알고리즘의 단점을 보완하여 만들어진 알고리즘이며, 길을 찾기 위한 동작에서 대표적으로 사용되는 알고리즘이다. 탐색 공간인 Graph가 존재하며, 각 지점을 의미하는 Node와 지점을 서로 연결하는 Edge로 이루어지며, f(n) = g(n) + h(n) 공식을 따라서 최단 경로를 탐색한다. 02. 휴리스틱이란?A* 알고리즘에서 휴리스틱 함수라고 불리우는 것은 컴퓨터 공학에서만 사용되는 것이 아니다. 기존 휴리스틱 이론을 컴퓨터 공학에서도 사용하는 것이다. 휴리스틱 이론은 경험에 기반하여 문제를 해결하는 것을 의미한다. 간단하게 설명하면 개인의 직관으로 판단하는 방법을 말한다. 03. 어떻게 ..
[디자인패턴] 1. MVP(Model-View-Presenter)
·
공부/디자인 패턴
MVP(Model-View-Presenter) MVP 패턴은 Model, View, Presenter를 사용하는 디자인 패턴이다. MVP는 MVC(Model-View-Controller) 패턴의 파생 패턴으로 MVC 패턴의 Model 수정에 따른 View 의존성에 대한 문제를 해결하고자 생겨났다. MVC 패턴은 아직 다룬 적이 없으므로, 해당 패턴을 알기 위해서는 다른 곳을 참고하길 바란다. ( 이후 추가가 된다면 수정할 예정임 ) 위 이미지는 MVP 패턴의 작동 방식에 대해서 간략하게 소개하였으며, 구조는 다른 블로그의 내용과 다르게 서술되었으나, 유니티 공식 Git Repo에서 제공하는 게임 디자인 패턴 코드를 기반으로 작성했다. 문제가 있을 경우 댓글로 남겨주시면 감사하겠다. 위와 같이 MVP 패턴..
SOLID 원칙은 무엇을 의미할까?
·
공부/CS
SOLID 원칙은 무엇을 의미할까? 객체 지향 언어를 다루다보니 SOLID 원칙에 대해서 접할 기회가 많았었는데, 졸업 작품에서 리팩터링을 진행하기 위해서 내가 알고 있는 내용들을 파트원들에게 공유하고자 처음으로 내용을 블로그에 정리한다. * 내용은 주관적 서술로 진행됨을 알립니다. 원칙의 어원 SOLID 원칙은 로버트 마틴이 2000년 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 기본 원칙을 말한다. 각자 SRP, OCP, LSP, ISP, DIP로 총 5개의 구성으로 이루어져 있으며, 각자의 앞글자를 따와 SOLID 원칙이라 한다. 중요하지는 않다. 사실 위에 적혀있는 SOLID 원칙의 어원은 중요한 것이 아니다. 우리가 중요하게 생각해야 하는 것은 왜 사용해야하는지에 대해서 판별을 내리는 것..