재귀 알고리즘 / 순차곱셈 구하기, 유클리드 호제법 구현
프로그래밍 공부/자료구조&알고리즘 공부2022. 7. 16. 16:54재귀 알고리즘 / 순차곱셈 구하기, 유클리드 호제법 구현

재귀란? 어떤 사건이 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의될 때 재귀적이라고 한다. 프로그래밍에서 재귀를 효과적으로 잘 사용하면 이런 정의뿐만 아니라 프로그램도 간결하게 할 수 있다. 순차곱셈 구하기 재귀의 대표적인 예로 음이 아닌 정수의 순차곱셈(factorial)을 구하는 것이 있다. 음이 아닌 정수 n의 순차곱셈 (n!)은 아래처럼 재귀적으로 정의 할 수 있다. 0! = 1 n > 0이면 n! = n x (n-1)! 코드를 통해 알아보도록 하자 #include int factorial(int n) { if (n > 0) return n * factorial(n - 1); else return 1; } int main(void) { int x; printf("정수를 입력하세요: ");..

[디자인 패턴] 옵저버 패턴(Observer Pattern)
프로그래밍 공부/자료구조&알고리즘 공부2022. 7. 12. 04:36[디자인 패턴] 옵저버 패턴(Observer Pattern)

옵저버 패턴(Observer Pattern) 한국의 20-30대 남성에게 옵저버를 물어본다면 대부분이 꾸물거리며 음흉하게 남의 기지를 훔쳐보는 프로토스의 옵저버를 떠올리실 것이다. 이 옵저버가 프로토스 뿐만 아니라 유니티에서도 많이 쓰이는 디자인 패턴중에 하나라고 해서 정리를 해보았다. 옵저버 패턴이란? 나도 이곳저곳 영상과 블로그 글을 참고하여 공부를 하고 왔지만 뭐든 딱 뭐라고 정의하는것이 참 어렵다. 옵저버 패턴은 Observer라는 뜻대로 감시자들이 있다. 이 감시자들이 계속 감시를 하다가 변화가 일어나면 이 변화에 맞는 행동들을 해준다.(콜백) 난 여러곳에 정리 되어 있는 정의만 보고나서 내가 포트폴리오를 만들면서 알림시스템을 썼을때의 방법일까? 라고 생각을 했었는데 달랐다. 난 비효율적으로 업..

시간 복잡도와 함수 포인터
프로그래밍 공부/자료구조&알고리즘 공부2022. 7. 9. 15:37시간 복잡도와 함수 포인터

알고리즘의 시간 복잡도 프로그램의 실행 속도는 프로그램이 동작하는 하드웨어나 컴파일러 등의 조건에 따라 달라진다. 알고리즘의 성능을 객관적으로 평가하는 기준을 복잡도(Complexity)라고 한다. 복잡도는 2가지 요소를 가지고 있다. 1. 시간 복잡도(Time Complexity) - 실행에 필요한 시간을 평가한 것 2. 공간 복잡도(Space Complexity) - 기억 영역과 파일 공간이 얼마나 필요한가를 평가한 것 앞서 올렸던 두가지의 검색 알고리즘을 예로들어보자. 선형 검색의 시간 복잡도 코드를 보기전에 시간 복잡도의 표기법부터 보고가자. Big-O(빅-오) ⇒ 상한 점근 (최악) Big-Ω(빅-오메가) ⇒ 하한 점근 (최선) Big-θ(빅-세타) ⇒ 그 둘의 평균 (평균) 이 처럼 세가지 표..

이진 검색 알고리즘(Binary Search)
프로그래밍 공부/자료구조&알고리즘 공부2022. 7. 8. 15:13이진 검색 알고리즘(Binary Search)

이진 검색 알고리즘 이진 검색은 요소가 오름차순 또는 내림차순으로 정렬된 배열에서 검색하는 알고리즘 이다. 이 알고리즘을 적용하는 전제 조건은 데이터가 키 값으로 이미 정렬 되어 있어야 한다. 그리고 이진검색은 선형 검색보다 좀 더 빠르게 검색 할 수 있다는 장점이 있다. 이진 검색 알고리즘의 종료 조건 1. 중간 인덱스의 값이 key와 일치하는 경우. 2. 검색 범위가 더 이상 없는 경우 이렇게 길이가 10인 배열에서 46을 찾는다고 해보자. 1. 가장 처음으로는 0과 9의 중간값인 4번 인덱스를 검사한다. 2. 우리가 찾는 숫자는 46이기 때문에 4번 인덱스의 값 32는 키 값 보다 작다. 3. 그러므로 우리는 중간인덱스 앞의 값들은 검사를 안해도 상관 없다고 확신을 할 수 있다.(정렬이 되어있다면)..

프로그래밍 공부/C# 프로그래밍2022. 7. 6. 15:26[OOP]객체 지향 프로그래밍에 대해

객체 지향 프로그래밍 (Object Oriented Programming) JAVA나 C#,C++과 같은 언어를 다뤄보신 분들이라면 어디선가 무조건 한번이상은 들어 보셨을것이다. 근데 말로만 들었지 면접때 객체 지향 프로그래밍이 뭔가요? 라고 물어본다면 뭐라 정의를 내리기가 애매하고 생각이 나지 않는다. 그래서 다시 한번 공부하고 정리를 해봤다. 내가 정의해보는 객체 지향 프로그래밍 당장 내 책상위에 올려져있는 물건들만 봐도 한 두개가 아니다. 나는 공부를 위해 책상위에 노트와 펜을 올려놨다. 공부를 하려면 노트라는 객체에 펜이라는 객체를 이용해 필기를 하며, 키보드라는 객체를 이용해 정보를 검색하고 모니터라는 객체를 이용해 검색한 결과물들을 시각적으로 확인 할 수있다. 이 처럼 현실세계에서도 여러 객체..

프로그래밍 공부/자료구조&알고리즘 공부2022. 7. 6. 14:35선형 검색 & 순차 검색

선형 검색(linear search) ,순차 검색(sequential search) 선형검색 & 순차 검색 이란? 요소가 직선 모양으로 늘어선 배열에서 원하는 키값을 갖는 요소를 만날 때까지 맨 앞부터 순서대로 요소를 검색하여 값을 찾아내는 알고리즘 선형검색 (linear search) , 순차 검색(sequential search) 이라고도 부른다. 선형 검색의 종료 조건 1. 검색할 값을 발견하지 못하고 배열의 끝을 지나간 경우 2. 검색할 값과 같은 요소를 발견한 경우 1번의 조건이 성립하면 검색 실패, 2번의 조건이 성립하면 검색 성공이다. 사실 선형 검색은 선형 검색이라는 알고리즘을 배우지 않아도 프로그래밍을 해 본 사람이라면 이름만 모를 뿐이지 많이들 쓰고 계시는 방식일 것이다. 코드 구현 #..

image