본문 바로가기

728x90

알고리즘

(31)
[알고리즘] 패스트캠퍼스 챌린지 07일차 알고리즘 복잡도 하나의 문제를 푸는 알고리즘은 다양한데, 어느 알고리즘이 더 좋은지 분석하기 위해 복잡도를 정의하고 계산해 이를 통해 판단함. 알고리즘 복잡도 계산 항목 시간 복잡도 : 실행 속도 >> 이게 가장 중요하다. 공간 복잡도 : 메모리 사이즈 => 가장 많이 영향을 미치는 요소는 반복문이다.. 알고리즘 성능 표기법 Big O (빅-오) 표기법: O(N) >> 이걸 익히자. 알고리즘 최악의 실행 시간을 표기 가장 많이/일반적으로 사용함 아무리 최악의 상황이라도, 이정도의 성능은 보장한다는 의미이기 때문 Ω (오메가) 표기법: Ω(N) 오메가 표기법은 알고리즘 최상의 실행 시간을 표기 Θ (세타) 표기법: Θ(N) 오메가 표기법은 알고리즘 평균 실행 시간을 표기 Big-O 표기법 O(입력) 입력 ..
[알고리즘] 패스트캠퍼스 챌린지 06일차 또 링크드리스트.. 오늘이 마지막!!! 다양한 형태의 링크드 리스트 더블 링크드 리스트(Doubly linked list) 기본 구조 이중 연결 리스트라고도 함 장점: 양방향으로 연결되어 있어서 노드 탐색이 양쪽으로 모두 가능 >> 이전에 계속 다뤘던 건 한 방향으로만 (->) 연결이 되는 링크드 리스트는 특정 노드를 탐색하는데 항상 앞에서부터 검색해야하므로 오래걸린다. >> 노드에 (데이터, 다음 데이터 주소) 만 저장하지 않고 (이전 데이터의 주소, 데이터, 다음 데이터 주소)의 형태로 이전 데이터 주소도 함께 저장해 양방향으로 탐색이 가능하도록 함!! 기존 단방향 링크드 리스트 노드에 이전 노드를 가리키는 변수(prev)가 하나 더 필요하다. class Node { var data: DataType..
[알고리즘] 패스트캠퍼스 챌린지 05일차 계속해서 링크드리스트 강좌. 링크드리스트 장단점 장점 미리 데이터 공간을 미리 할당하지 않아도 됨 배열은 미리 데이터 공간을 할당 해야 함 단점 연결을 위한 별도 데이터 공간이 필요하므로, 저장공간 효율이 높지 않음 연결 정보를 찾는 시간이 필요하므로 접근 속도가 느림 중간 데이터 삭제시, 앞뒤 데이터의 연결을 재구성해야 하는 부가적인 작업 필요 링크드 리스트 데이터 사이에 추가하기 어제 했던 것에 이어서 링크드리스트(Node(1) ~ Node(10)) 사이에 새로운 데이터를 추가해보쟈. Node(1) Node(2) 사이에 Node(1.5)를 넣는다고 했을 때 Node(1)이 나올 때 까지 링크드리스트 데이터를 검색한다. Node(1)의 포인터가 Node(1.5)를 가리키도록 한다. Node(1.5)의 ..
[알고리즘] 패스트캠퍼스 챌린지 04일차 링크드리스트(= 연결 리스트; Linked List) 배열은 미리 공간을 확보해놓고 데이터를 넣는 방식, 링크드 리스트는 필요할 때마다 데이터를 추가할 수 있는 구조 배열은 순차적으로 연결된 공간에 데이터를 나열하는 데이터 구조 링크드 리스트는 떨어진 곳에 존재하는 데이터를 화살표로 연결해서 관리하는 데이터 구조 배열은 데이터만 저장, 링크드 리스트는 (그 데이터 + 다음 데이터를 가르키는 주소)를 저장한다. 노드(Node): 데이터 저장 단위 (데이터값, 포인터) 로 구성 포인터(pointer): 각 노드 안에서, 다음이나 이전의 노드와의 연결 정보를 가지고 있는 공간 ( 주소 ) 링크드리스트에서 첫번째 노드만 알고 있으면 연결된 모든 노드를 찾아갈 수 있음. 첫번째 노드에서 다음 데이터의 주소로 다음..
[알고리즘] 패스트캠퍼스 챌린지 03일차 큐(Queue) 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조 FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out) 방식으로 스택과 꺼내는 순서가 반대 Enqueue: 큐에 데이터를 넣는 기능 Dequeue: 큐에서 데이터를 꺼내는 기능 멀티 태스킹을 위한 프로세스 스케쥴링 방식을 구현하기 위해 많이 사용됨 (운영체제 참조) 파이썬에서 Queue 파이썬은 Queue 라이브러리를 제공한다. 멋지다.. FIFO Queue - FIFO(First-In, First-Out) import queue queue = queue.Queue() 그냥 이렇게만 해주면 Queue가 만들어진다. // queue에 데이터 넣을 때 queue.put(89) // queue에 끝으..
[알고리즘] 패스트캠퍼스 챌린지 02일차 배열 : 유사한 데이터를 순서대로 나열해 구성한 구조 - 배열이 필요한 이유 같은 종류의 데이터를 효율적으로 관리하기 위해 사용 같은 종류의 데이터를 순차적으로 저장 [장점] 첫 데이터의 위치에서 부터 상대적인 위치로 원하는 데이터에 빠르게 접근이 가능 [단점] 배열에 데이터 추가 / 삭제가 어려움 파이썬에서 배열 - "리스트"로 배열을 구현한다. - 1차원 / 2차원 배열 인덱스로 데이터 출력하기 // 1차원 배열 data = [1, 2, 3, 4, 5] print(data) // [1, 2, 3, 4, 5] // 2차원 배열 dataList = [[1, 2, 3], [4, 5, 6]] print(dataList[0]) // [1, 2, 3] print(dataList[0][0]) // 1 print(..
[알고리즘] 패스트캠퍼스 챌린지 01일차 8월 중에 회사에 지치고 힘들어서 퇴사를 했다. 쉬는 기간동안 여행도 가고 하고싶은 것도 하고 부족한 공부도 해보기로 했다. 앱개발자로서 처음에는 알고리즘의 중요성을 크게 못느꼈는데 점점 일을 하다보니, 그리고 이직을 준비하다보니 알고리즘의 중요성과 필요성이 너무너무 느껴졌다. 대학교때도 자료구조/알고리즘을 배운 적이 없어서 혼자 공부하기 막막해서 인강을 알아보고, 패스트캠퍼스 환급 과정을 신청하게됐다. 매일매일 할 수 있을지는 모르겠지만 일단 시작해보기로!! 신청한 강의명은 "알고리즘 / 기술면접 완전 정복 올인원 패키지 Online" 이다. 강의는 파이썬으로 진행된다. iOS 앱 개발 시 Swift를 사용하지만 Swift로 진행되는 알고리즘 강의는 찾을 수 없기도 하고.. 예전에 대학생때 파이썬 잠깐..

728x90