분류 전체보기
-
버블 정렬Algorithm 2022. 1. 29. 14:41
정렬 알고리즘의 정의 정렬(sorting)이란 텍스트나 숫자 등의 key를 항목 값의 대소 관계에 따라 데이터 집합을 일정한 순서로 바꾸어 늘어놓는 작업을 말한다. 데이터를 정렬하면 쉽게 검색할 수 있다. 값이 작은 데이터를 앞쪽에 늘어놓는 것을 오름차순(ascending order)정렬이라 하고, 반대를 내림차순(descending order) 정렬이라 한다. 정렬 알고리즘은 데이터를 교환-선택-삽입하면서 정렬을 완료한다. 대부분의 정렬 알고리즘은 이 세가지를 응용한다. 안정성 여러 정렬 알고리즘 가운데 안정적인(stable) 알고리즘과 그렇지 않은 알고리즘으로 나눌 수 있다. 위의 그림처럼 안정적인 정렬 알고리즘은 값이 같은 원소의 순서가 정렬한 후에도 유지되는 것을 말한다. 안정적이지 않은 알고리즘..
-
재귀 알고리즘 분석Algorithm 2022. 1. 28. 22:54
어떠한 이벤트에서 자기 자신을 포함하고 다시 자기 자신을 사용하여 정의되는 경우 재귀(recursion)라고 한다. 재귀를 사용하는 대표적인 예로 팩토리얼(factorial) 문제가 있다. 팩토리얼은 양의 정수를 순서대로 곱한다는 의미다. 양의 정수 n의 팩토리얼(n!)은 다음과 같이 재귀적 정의를 할 수 있다. (재귀 과정으로 팩토리얼값을 구하는 문제는 재귀의 원리를 이해하기 위한 예제일 뿐 알고리즘 문제를 풀 때 현실적으로 적절하지 않다.) 더보기 def factorial(n :int): if n > 0: return n * factorial(n - 1) else: return 1 if __name__ == '__main__': n = int(input('출력할 팩토리얼 값을 입력하세요 : ')) p..
-
큐와 스택Algorithm 2022. 1. 27. 17:25
Queue 큐는 스택과 같이 데이터를 임시 저장하는 자료구조이다(배열을 사용하여 구현 가능). 가장 먼저 넢은 데이터를 가장 먼저 꺼내는 선입선출(FIFO) 구조이다. 컴퓨터에서 데이터를 주고받을 때 각 주변장치들 사이에 존재하는 속도의 차이나 시간차이를 극복하기 위한 임시 기억 장치로 큐가 사용되는데, 이것을 buffer라고 한다. 큐에 데이터를 추가하는 작업을 인큐(enqueue), 데이터를 꺼내는 작업을 디큐(dequeue). 데이터를 꺼내는 쪽을 front, 넣는 쪽을 rear라고 한다. 위의 배열은 원소 24를 인큐하고 19를 디큐하는 작업이다. 인큐는 맨 뒤의 인덱스에 추가하면 그만이기 때문에 복잡도는 O(1)으로 적은 cost로 구현 가능하다. 하지만 디큐는 맨 앞의 원소를 꺼낸 후 모든 원..
-
검색 알고리즘 - 해시법Algorithm 2022. 1. 20. 18:52
검색의 종류로는 배열 검색, 연결 리스트 검색, 이진 검색 트리 알고리즘이 있다. 배열 검색의 종류로는 선형 검색 : 무작위로 늘어놓은 데이터 집합에서 검색을 수행한다. 이진 검색 : 일정한 규칙으로 늘어놓은 데이터 집합에서 빠른 검색을 수행한다. 해시법 : 추가-삭제가 자주 일어나는 데이터 집합에서 빠른 검색을 수행한다. 체인법 : 같은 해시값 데이터를 연결 리스트로 연결하는 방법이다. 오픈 주소법 : 데이터를 위한 해시값이 충돌할 때 재해시하는 방법이다. 해시법 hashing 검색과 더불어 데이터의 추가와 삭제도 효율적이다. 해시법은 '데이터를 저장할 위치 = 인덱스'를 간단한 연산으로 구하는 것을 말한다. 배열의 키들은 해시함수를 거쳐서 해시값(Hash Table)을 만들어 낸다. Hash Tabl..
-
검색 알고리즘 - 이진검색Algorithm 2022. 1. 20. 18:51
검색의 종류로는 배열 검색, 연결 리스트 검색, 이진 검색 트리 알고리즘이 있다. 배열 검색의 종류로는 선형 검색 : 무작위로 늘어놓은 데이터 집합에서 검색을 수행한다. 이진 검색 : 일정한 규칙으로 늘어놓은 데이터 집합에서 빠른 검색을 수행한다. 해시법 : 추가-삭제가 자주 일어나는 데이터 집합에서 빠른 검색을 수행한다. 체인법 : 같은 해시값 데이터를 연결 리스트로 연결하는 방법이다. 오픈 주소법 : 데이터를 위한 해시값이 충돌할 때 재해시하는 방법이다. 이진 검색 binary search 이진 검색은 원소가 오름차순이나 내림차순으로 정렬(sort)된 배열에 좀 더 효율적으로 검색할 수 있는 알고리즘이다. (선형 검색보다 빠르게 검색 가능) 위의 그림처럼 오름차순으로 정렬된 배열에서 76을 찾는 과정..
-
검색 알고리즘 - 선형 검색Algorithm 2022. 1. 20. 15:56
검색의 종류로는 배열 검색, 연결 리스트 검색, 이진 검색 트리 알고리즘이 있다. 배열 검색의 종류로는 선형 검색 : 무작위로 늘어놓은 데이터 집합에서 검색을 수행한다. 이진 검색 : 일정한 규칙으로 늘어놓은 데이터 집합에서 빠른 검색을 수행한다. 해시법 : 추가-삭제가 자주 일어나는 데이터 집합에서 빠른 검색을 수행한다. 체인법 : 같은 해시값 데이터를 연결 리스트로 연결하는 방법이다. 오픈 주소법 : 데이터를 위한 해시값이 충돌할 때 재해시하는 방법이다. 선형 검색 linear search 가장 기본적인 배열 검색 방법이다. 선형으로 늘어선 배열에서 원하는 Key값을 찾을 때까지 맨 앞부터 스캔하여 순서대로 검색하는 알고리즘이다. 즉, 선형 검색에서 배열 스캔의 종료 조건은 2가지다. 1. 검색할 값..
-
Git 교과서 06 (서브모듈)Git Github 2021. 12. 16. 20:40
깃 호스팅 서비스들은 제공되는 저장소 용량을 제한한다. 보통 1GB 용량을 제공하기 때문에 파일 개수가 많은 프로젝트에서는 좀 더 효율적인 관리 방법이 필요하다. 규모가 큰 프로젝트는 필요에 맞게 작은 저장소로 분할하여 운영하는 것이 효율적이다. 이러한 저장소의 분할 개념을 서브모듈이라고 한다. 서브모듈은 저장소 하나가 다른 깃 저장소를 포함하는 형태를 의미한다. 요즘 규모가 큰 프로젝트는 모듈화하여 개발하는 추세다. 각 기능을 모듈화하여 독립 깃 저장소로 관리한다. 독립된 저장소는 모듈로서 다시 메인 저장소와 결합하여 재사용된다. 메인 저장소에는 서브 저장소가 여러 개 있다. 따라서 저장소 간 상하 관계가 발생한다. 보통 부모 저장소와 자식 저장소 형태로 나눈다. 원격 저장소로 동기화된 자식들은 언제든..
-
Git 교과서 05 (배포와 태그)Git Github 2021. 12. 16. 19:08
배포 프로그램을 개발한 후에 결과물을 최종사용자에게 전달하는 과정을 배포라고 한다.완성된 형태로 배포하기 위해선 코드를 정리하는 추가 작업이 필요하다. 테스트 메시지나 불필요한 주석들을 정리한다. 버전 배포 이후에 코드를 수정해야 하는 경우가 많다. 즉, 코드는 개발을 완료한 후에도 계속 수정된다. 코드를 수정했다면 개발자 또는 최종 사용자가 이를 확인하고 구별할 수 있어야 한다. 이러한 차이를 구별할 수 있게 하는 것이 버전(version)이다. 보통 숫자를 사용하여 식별한다. 숫자가 클수록 최근에 수정된 코드이다. 버전업(version up)은 오래된 버전의 프로그램을 최신 버전의 코드로 변경하는 것을 의미한다. 업계규칙 기본적인 번호는 단일 번호 하나로 구성되어 있다. 단일 번호는 큰 기능을 변경했..