Programming/Data Structure & Algorithm
-
Time Complexity (시간 복잡도)Programming/Data Structure & Algorithm 2021. 11. 9. 15:40
안녕하세요 BeePeach입니다 :) 오늘은 알고리즘이나 데이터 구조를 배울 때 한 번쯤 들어보는 Time Complexity(시간 복잡도)에 대해서 공부해보도록 하겠습니다. 시간 복잡도의 개념이 필요한 이유 어떤 한 가지 문제를 해결할 때 정해진 정답은 없습니다. 그 문제를 해결하는 방법은 매우매우 많겠죠. 어떤 해결방법(알고리즘)이 더 좋은 해결 방법인지 분석하기 위해서 시간 복잡도라는 것을 사용합니다. 시간 복잡도는 알고리즘의 실행 속도를 나타냅니다. 비슷한 예로 Space Complexity(공간 복잡도)가 있습니다. 공간복잡도는 알고리즘에 필요한 메모리 크기를 나타냅니다. 요즘 시대에는 메모리가 충분하기 때문에 공간복잡도의 중요성은 많이 낮아졌습니다. 그래서 대부분 시간 복잡도를 이용해 이 문제..
-
DataStructure - Linked ListProgramming/Data Structure & Algorithm 2021. 11. 6. 01:10
안녕하세요 BeePeach입니다 :) 오늘 공부해볼 자료구조는 linked list(연결 리스트)입니다. 이전에 공부해봤던 배열의 단점은 미리 데이터 공간을 확보해야 한다는 점입니다. 그래서 데이터에 정보를 추가시키려는데 공간이 작다면 다른 곳에 더 큰 데이터 공간을 확보시키고 데이터를 옮기는 작업이 이루어집니다. Linked List는 데이터공간을 미리 확보하지 않고 흩어져있는 데이터 공간들을 연결시킵니다. 하지만 단점도 존재하겠죠? 주소를 저장하는 별도의 데이터 공간이 필요합니다. 원하는 데이터를 찾을때 앞에서 또는 뒤에서부터 찾아가야 합니다. 중간의 데이터를 삭제하면 양쪽 데이터를 연결시켜주어야 합니다. 그럼 코드로 한번 만들어보겠습니다. Node 배열은 데이터만 저장을 하죠?? LinkedList..
-
DataStructure - Stack(스택)Programming/Data Structure & Algorithm 2021. 10. 14. 20:20
안녕하세요 Beepeach 입니다 :) 오늘은 데이터구조중에서 Stack에 대해서 공부해보려 합니다. Stack Stack은 queue와 같이 아주 기본적인 데이터 구조입니다. 주로 프로세스의 함수 처리 방식에 사용됩니다. Stack은 LIFO(Last In First Out) 정책을 따릅니다. 즉 가장 마지막에 들어온 데이터가 가장 첫 번째로 나가게 됩니다. 예를 들어 급식실의 식판을 생각하면 편합니다. 식판을 쌓아두면 제일 아래에 있는 식판을 가져가는 게 아니라 가장 위에 있는 식판을 가져다 쓰게 되죠?? 이러한 방식이 LIFO입니다. (역시 FIFO처럼 리포가 아니라 라이포로 발음합니다.) 스택은 구조가 단순하고 구현이 쉽다는 장점이 있습니다. 하지만 최대 공간을 미리 확보해야 하고 그렇기 때문에 ..
-
DataStructure - Queue - 큐Programming/Data Structure & Algorithm 2021. 10. 13. 16:49
안녕하세요 Beepeach입니다 :) 오늘 공부해볼 자료구조는 Queue(큐)입니다. Queue에서도 여러 가지 종류가 있지만 그중 가장 기본이 되는 queue에 대해서 공부해보겠습니다! Queue Queue는 OS(운영체제)에서 프로세스 스케쥴링에 사용하는 아주 기본적인 자료구조입니다. Queue라는 단어를 사전에서 찾아보면 줄, 대기열이라고 나옵니다. 이 단어를 사용한 이유가 있겠죠?? 단어 그대로 줄 서는것과 비슷하게 동작하기 때문입니다. 식당에서 가서 대기줄을 서는 것을 생각해보세요. 먼저 줄을 선 순서대로 식당에 입장을 하죠?? 줄을 처음에 선 사람이 가장 먼저 줄을 나가게 됩니다. 이러한 방식을 FIFO(First-In First-out)라고 합니다. (발음하는 방법은 파이포입니다. 피포가 아..
-
DataStructure - Array(배열)Programming/Data Structure & Algorithm 2021. 10. 7. 17:29
안녕하세요 BeePeach입니다 :) 오늘은 자료구조에서 가장 기초적인 Array(배열)에 대해서 공부해보도록 하겠습니다! 배열이란 같은 형식의 데이터를 메모리에 연속적으로 저장한 자료구조입니다. 그리고 각각의 원소를 인덱스로 접근할 수 있는 특징이 있습니다. 배열은 Swift에서 이미 만들어져 있으므로 따로 만들 필요는 없고 Swift의 배열에 대해서 잘 알아두기만 하면 될 거 같습니다. Swift 배열에 대해서는 이전 포스팅에서 다루었으므로 여기를 확인해주세요. 배열의 장점 배열은 인덱스로 접근이 가능하기 때문에 빠른 접근이 가능합니다. 인덱스가 없다면 데이터의 처음부터 접근을 해서 하나하나 찾아봐야 하지만 인덱스가 있기 때문에 해당 데이터에 바로 접근이 가능합니다. 배열의 단점 배열은 미리 메모리 ..
-
DataStructure - Data Structure 자료구조란??Programming/Data Structure & Algorithm 2021. 10. 7. 15:17
자료구조와 알고리즘이라는 말은 하도 많이 들어서 익숙하지만 둘이 의미하는 것에 대해서는 생각해본 적이 없어서 자료구조와 알고리즘을 공부하는 김에 공부한 기록을 남겨보려 합니다. 자료구조?? 배우는 이유?? 데이터를 효율적으로 관리하기 위해서 데이터를 어떤 구조로 만들 것인가? 단어 그대로 데이터(자료)의 구조를 의미합니다. 관리라는 의미는 탐색, 추가, 삭제 등의 작업을 말합니다. 예를 들어 학생 데이터를 관리하는데 그냥 마구잡이로 데이터를 저장할지 이름순으로 저장을 할지 아니면 학년과 번호로 나누어서 저장을 할지 데이터를 구조화하는 방법은 여러 가지가 있을 수 있습니다. 이러한 방법 중에서 가장 효율적으로 데이터를 관리할 수 있는 구조를 공부하는 것이 자료구조를 공부하는 목적입니다. 그리고 한 가지 자..
-
Swift 값 입력 받기Programming/Data Structure & Algorithm 2021. 1. 21. 03:45
211207 추가내용 : 글 초반에는 ?를 이용하여 Unwrapping하고 있습니다. 이는 !사용에 익숙해지면 실제 프로젝트에서 ?대신 !을 많이 사용하게 되고 이는 좋지 않은 결과를 초래할 수 있으므로 경각심을 가지고 조심스럽게 사용하자 라는 의미에서 작성했습니다. 하지만 TestCase나 CodingTest과 같은 특수한 경우에서는 일부러 crash를 발생시키고 어느 부분에서 문제가 발생하는지 쉽게 알아야하는 이유와 속도의 차이로 ?보다는 !를 사용하시는게 좋습니다. 안녕하세요 BeePeach입니다 :) 다른 언어를 하다가 swift를 하면 만나게 되는 문제! 바로 콘솔에 값을 입력하는 문제입니다. 알고리즘 문제를 풀려고 하는데 값을 입력받아서 하는 게 대부분이죠?? 그런데 어떻게 입력을 받지 난감했..