CS/Algorithm
-
/* 본 게시물은 '독하게 시작하는 C 프로그래밍 | with 최호성' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [Kotlin 자료구조 - 배열] : https://kotlinworld.com/52 [BoostCourse - cs50 - 배열] : https://www.boostcourse.org/cs112 # 배열(Array) 1. 배열이란? 배열은 자료구조에서 가장 일반적인 구조로 메모리상에 형식이 같은 자료 여러 개가 모여 새로운 하나를 이룬 형식이다. 배열은 여러 값을 저장하기 위해 메모리의 연속적인 공간을 차지하고 있다. 코틀린으로 배열을 선언해보자. // [1,2,3] 배열 생성 val arr1: Array = arrayOf(1,2,3) 위 코드는 [1,2,3] 의 배열을 만든다. 코..
[자료구조] 배열/* 본 게시물은 '독하게 시작하는 C 프로그래밍 | with 최호성' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [Kotlin 자료구조 - 배열] : https://kotlinworld.com/52 [BoostCourse - cs50 - 배열] : https://www.boostcourse.org/cs112 # 배열(Array) 1. 배열이란? 배열은 자료구조에서 가장 일반적인 구조로 메모리상에 형식이 같은 자료 여러 개가 모여 새로운 하나를 이룬 형식이다. 배열은 여러 값을 저장하기 위해 메모리의 연속적인 공간을 차지하고 있다. 코틀린으로 배열을 선언해보자. // [1,2,3] 배열 생성 val arr1: Array = arrayOf(1,2,3) 위 코드는 [1,2,3] 의 배열을 만든다. 코..
2021.09.09 -
/* 본 게시물은 ' ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [위키백과 - 자료구조] : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0 #자료구조 1. 자료 구조란? 자료 구조의 정의는 다음과 같다. 자료구조는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다. 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다. [출처] : 위키백과 - 자료구조 그렇다면 자료구조를 왜 배워야할까? 이에 대한 답은 자료 구조에 따라 알고리즘의 성능에 영향을 결정하기 때문이다. 신중히 선택한 자료구조는 보다 효율적인 ..
[자료 구조] 자료구조란?/* 본 게시물은 ' ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [위키백과 - 자료구조] : https://ko.wikipedia.org/wiki/%EC%9E%90%EB%A3%8C_%EA%B5%AC%EC%A1%B0 #자료구조 1. 자료 구조란? 자료 구조의 정의는 다음과 같다. 자료구조는 컴퓨터 과학에서 효율적인 접근 및 수정을 가능케 하는 자료의 조직, 관리, 저장을 의미한다. 더 정확히 말해, 자료 구조는 데이터 값의 모임, 또 데이터 간의 관계, 그리고 데이터에 적용할 수 있는 함수나 명령을 의미한다. [출처] : 위키백과 - 자료구조 그렇다면 자료구조를 왜 배워야할까? 이에 대한 답은 자료 구조에 따라 알고리즘의 성능에 영향을 결정하기 때문이다. 신중히 선택한 자료구조는 보다 효율적인 ..
2021.09.08 -
/* 본 게시물은 ' ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [BoostCourse - cs50 - 재귀] : https://www.boostcourse.org/cs112 #재귀 우리는 알고리즘을 구현하기 위해 코드를 작성하다 보면 동일한 작업을 반복해야 할 때가 있다. 보통 이러한 작업은 함수로 구현하여 코드를 보다 효율적으로 만들 수 있다. 하지만 함수 내에서도 동일한 작업이 반복되는 경우는 어떻게 할까? for문이나 while 문으로 반복을 구현할 수도 있지만 이번에 배울 '재귀' 를 통해 함수 내에서 반복을 만들 수 있다. 재귀에 대해 배워보자. 1. 재귀란? 재귀의 사전적의미는 어떠한 것을 정의할 때 자기자신을 참조(호출)하는 것을 뜻한다. 즉, 알고리즘에서 재귀란 함수를 함수 내..
[Algorithm] 재귀/* 본 게시물은 ' ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [BoostCourse - cs50 - 재귀] : https://www.boostcourse.org/cs112 #재귀 우리는 알고리즘을 구현하기 위해 코드를 작성하다 보면 동일한 작업을 반복해야 할 때가 있다. 보통 이러한 작업은 함수로 구현하여 코드를 보다 효율적으로 만들 수 있다. 하지만 함수 내에서도 동일한 작업이 반복되는 경우는 어떻게 할까? for문이나 while 문으로 반복을 구현할 수도 있지만 이번에 배울 '재귀' 를 통해 함수 내에서 반복을 만들 수 있다. 재귀에 대해 배워보자. 1. 재귀란? 재귀의 사전적의미는 어떠한 것을 정의할 때 자기자신을 참조(호출)하는 것을 뜻한다. 즉, 알고리즘에서 재귀란 함수를 함수 내..
2021.09.07 -
/* 본 게시물은 ' 뇌를 자극하는 알고리즘 | with 박성현 ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [정렬 - 퀵 정렬] : http://dawoonjeong.com/algorithm-sort-quick/ 1. 퀵 정렬 퀵 정렬은 이름에서 부터 퀵이 들어간 빠른 정렬 알고리즘이다. 퀵 정렬은 전쟁 전략 중의 하나인 '분할 정복'에 기반한 알고리즘이다. 분할 정복 전략은 적군의 전체를 공략하는 대신, 전체를 구성하는 구성 요소들을 나누어 잘게 쪼개진 적을 공략하는 전법이다. (분할 정복에 대한 자세한 내용은 다른 게시물에서 다루겠다.) 퀵 정렬 예시 퀵 정렬은 다음과 같은 과정으로 분할 정복을 이용해 정렬을 수행한다. 데이터 집합 내에서 임의의 기준 요소를 선택하고, 기준 요소보다 작은 ..
[Algorithm] 퀵 정렬/* 본 게시물은 ' 뇌를 자극하는 알고리즘 | with 박성현 ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [정렬 - 퀵 정렬] : http://dawoonjeong.com/algorithm-sort-quick/ 1. 퀵 정렬 퀵 정렬은 이름에서 부터 퀵이 들어간 빠른 정렬 알고리즘이다. 퀵 정렬은 전쟁 전략 중의 하나인 '분할 정복'에 기반한 알고리즘이다. 분할 정복 전략은 적군의 전체를 공략하는 대신, 전체를 구성하는 구성 요소들을 나누어 잘게 쪼개진 적을 공략하는 전법이다. (분할 정복에 대한 자세한 내용은 다른 게시물에서 다루겠다.) 퀵 정렬 예시 퀵 정렬은 다음과 같은 과정으로 분할 정복을 이용해 정렬을 수행한다. 데이터 집합 내에서 임의의 기준 요소를 선택하고, 기준 요소보다 작은 ..
2021.09.04 -
/* 본 게시물은 ' 뇌를 자극하는 알고리즘 | with 박성현 ' 의 내용을 토대로 작성되었습니다. */ 1. 삽입 정렬 삽입 정렬은 데이터 집합을 순회하면서 정렬이 필요한 요소를 뽑아내어 이를 다시 적당한 곳에 삽입해 나가는 알고리즘이다. 예시로 뒤섞여 있는 트럼프 카드를 순서대로 정리하는 모습을 생각해보면 이해하기 쉽다. 카드를 한 장씩 뽑앙 카드의 값에 따라 적절한 곳에 끼워 넣는 것을 반복하다 보면 결국에는 모든 카드가 순서대로 정리되는 것 처럼, 데이터 집합에서 요소를 하나씩 뽑아 적절한 곳에 끼워 넣는 것을 반복하다 보면 정렬된 데이터 집합을 얻을 수 있다. 삽입 정렬 과정은 다음과 같다. (정렬 기준은 오름차순으로 가정한다.) 인덱스가 1인 값부터 정렬을 시작한다. 인덱스가 1인 값을 임시..
[Algorithm] 삽입 정렬/* 본 게시물은 ' 뇌를 자극하는 알고리즘 | with 박성현 ' 의 내용을 토대로 작성되었습니다. */ 1. 삽입 정렬 삽입 정렬은 데이터 집합을 순회하면서 정렬이 필요한 요소를 뽑아내어 이를 다시 적당한 곳에 삽입해 나가는 알고리즘이다. 예시로 뒤섞여 있는 트럼프 카드를 순서대로 정리하는 모습을 생각해보면 이해하기 쉽다. 카드를 한 장씩 뽑앙 카드의 값에 따라 적절한 곳에 끼워 넣는 것을 반복하다 보면 결국에는 모든 카드가 순서대로 정리되는 것 처럼, 데이터 집합에서 요소를 하나씩 뽑아 적절한 곳에 끼워 넣는 것을 반복하다 보면 정렬된 데이터 집합을 얻을 수 있다. 삽입 정렬 과정은 다음과 같다. (정렬 기준은 오름차순으로 가정한다.) 인덱스가 1인 값부터 정렬을 시작한다. 인덱스가 1인 값을 임시..
2021.09.04 -
/* 본 게시물은 ' 뇌를 자극하는 알고리즘 | with 박성현 ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [BoostCourse - CS50 - 버블 정렬 / 선택 정렬] : https://www.boostcourse.org/cs112 이번에 공부할 내용은 데이터를 일련의 명령이나 반복되는 절차에 의해 정렬을 수행하는 정렬 알고리즘이다. 우리는 그중 버블 정렬, 선택 정렬, 삽입 정렬, 퀵 정렬에 대해 알아보겠다. 각 알고리즘의 구조와 성능을 중점적으로 비교해가며 공부해보자. '왜 우리는 데이터들을 정렬해야될까?' 위 질문에 대한 답은 앞서 검색 알고리즘을 배우면서 알아보았다. 우리가 데이터를 정렬하는 이유는 정렬을 하면 데이터를 빠르게 찾을 수 있기 때문이다! 단, 데이터를 정렬하는 작업도..
[Algorithm] 버블 / 선택 정렬 알고리즘/* 본 게시물은 ' 뇌를 자극하는 알고리즘 | with 박성현 ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [BoostCourse - CS50 - 버블 정렬 / 선택 정렬] : https://www.boostcourse.org/cs112 이번에 공부할 내용은 데이터를 일련의 명령이나 반복되는 절차에 의해 정렬을 수행하는 정렬 알고리즘이다. 우리는 그중 버블 정렬, 선택 정렬, 삽입 정렬, 퀵 정렬에 대해 알아보겠다. 각 알고리즘의 구조와 성능을 중점적으로 비교해가며 공부해보자. '왜 우리는 데이터들을 정렬해야될까?' 위 질문에 대한 답은 앞서 검색 알고리즘을 배우면서 알아보았다. 우리가 데이터를 정렬하는 이유는 정렬을 하면 데이터를 빠르게 찾을 수 있기 때문이다! 단, 데이터를 정렬하는 작업도..
2021.09.03 -
/* 본 게시물은 ' 뇌를 자극하는 알고리즘 | with 박상현 ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [BoostCourse - 모두를 위한 컴퓨터 과학(CS50) - 검색 알고리즘] : https://www.boostcourse.org/cs112 #검색(탐색) 알고리즘 오늘 배울 알고리즘은 고성능 데이터 탐색을 구현하는데 필요한 기초가 될 것이다. 이번에 다룰 알고리즘은 순차 탐색, 이진 탐색이다. 이들을 다 배운다면 우리는 주어진 배열 속에서 특정 값을 찾을 수 있다. 자, 순차 탐색에 대해 먼저 알아보자. 1. 순차 탐색 순차 탐색(선형 검색)은 데이터 집합의 처음부터 끝까지 차례대로 모든 요소를 비교해서 데이터를 찾는 탐색 알고리즘이다. 다시 말해, 선형검색은 원하는 원소가 발견될..
[Algorithm] 검색(탐색) 알고리즘/* 본 게시물은 ' 뇌를 자극하는 알고리즘 | with 박상현 ' 의 내용을 토대로 작성되었습니다. */ 참고 자료 [BoostCourse - 모두를 위한 컴퓨터 과학(CS50) - 검색 알고리즘] : https://www.boostcourse.org/cs112 #검색(탐색) 알고리즘 오늘 배울 알고리즘은 고성능 데이터 탐색을 구현하는데 필요한 기초가 될 것이다. 이번에 다룰 알고리즘은 순차 탐색, 이진 탐색이다. 이들을 다 배운다면 우리는 주어진 배열 속에서 특정 값을 찾을 수 있다. 자, 순차 탐색에 대해 먼저 알아보자. 1. 순차 탐색 순차 탐색(선형 검색)은 데이터 집합의 처음부터 끝까지 차례대로 모든 요소를 비교해서 데이터를 찾는 탐색 알고리즘이다. 다시 말해, 선형검색은 원하는 원소가 발견될..
2021.08.27 -
참고 자료 [BoostCourse - 모두를 위한 컴퓨터 과학 (CS50 2019) - 알고리즘] : https://www.boostcourse.org/cs112 #Big-O 최근 들어 코드를 짜다보면 '조금 더 효율적(좀 더 빠르게)으로 만들 수 있지 않을까?' 라는 생각을 많이 한다. 그래서 조금 더 효율적인 코드들을 쓰는 방법에 대해 배우고자 한다. 간단한 CS 내용들부터 정리하고 차례차례 알고리즘에 대해 공부해 나가보자. 우리가 프로그램을 작성한 후에 실행하면 작업이 완료될 때 까지 어느정도 시간이 소요된다. 아주 간단한 프로그램인 경우에는 걱정할 필요가 없지만, 처리하는 데이터가 많아지고 처리하는 작업이 복잡해질수록 실행 시간은 매우 중요해진다. 특정 알고리즘을 작성하였을 때 그 실행 시간을 표..
[Algorithm] 시간 복잡도 - Big-O참고 자료 [BoostCourse - 모두를 위한 컴퓨터 과학 (CS50 2019) - 알고리즘] : https://www.boostcourse.org/cs112 #Big-O 최근 들어 코드를 짜다보면 '조금 더 효율적(좀 더 빠르게)으로 만들 수 있지 않을까?' 라는 생각을 많이 한다. 그래서 조금 더 효율적인 코드들을 쓰는 방법에 대해 배우고자 한다. 간단한 CS 내용들부터 정리하고 차례차례 알고리즘에 대해 공부해 나가보자. 우리가 프로그램을 작성한 후에 실행하면 작업이 완료될 때 까지 어느정도 시간이 소요된다. 아주 간단한 프로그램인 경우에는 걱정할 필요가 없지만, 처리하는 데이터가 많아지고 처리하는 작업이 복잡해질수록 실행 시간은 매우 중요해진다. 특정 알고리즘을 작성하였을 때 그 실행 시간을 표..
2021.08.25