Algorithm & Data Structure
![[Concept] 시간 복잡도](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbboe3%2Fbtra8ALOwgB%2FZuXY34Mme685XabNWEuWG0%2Fimg.png)
[Concept] 시간 복잡도
알고리즘에는 다양한 방법이 있습니다. 하나의 문제를 푸는데도 다양한 풀이 방법이 있는데, 이중 무엇이 정답이라고는 할 수 없지만, 더 나은, 더 좋은 알고리즘을 고를 수 있습니다. 그 (정량적인) 기준이 되는 것이 속도와 메모리공간입니다. 문제를 푸는 데에 빠르게 풀 수 있고, 더 적은 메모리양을 쓰는 알고리즘이 좋은 알고리즘이라 할 수 있습니다. 대표적으로 알고리즘의 복잡도를 계산할 때 시간복잡도와 공간복잡도를 체크합니다. 시간 복잡도: 알고리즘 실행 속도 공간 복잡도: 알고리즘이 사용하는 메모리 사이즈 ex)변수 사용갯수, 메모리 etc.. 시간 복잡도 시간 복잡도는 말그대로 알고리즘을 실행하는데 걸리는 속도를 의미합니다. 프로그래밍에서 이 속도, 즉 시간 복잡도에 가장 영향을 많이 미치는 요소는 반..
![[Concept] 더블 링크드 리스트 (double linked list)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdr3yCP%2Fbtra6Jhq5sg%2FhMlkIxUo5yhpIeQqDBqwFk%2Fimg.png)
[Concept] 더블 링크드 리스트 (double linked list)
이번 글에서는 더블 링크드 리스트 (이중 연결 리스트) 에 대해 적어보겠습니다. 이전 글에서 적었던 일반 링크드 리스트는 데이터를 조회할 때 head, 즉 앞에서부터 찾아가는 방식이었습니다. But, 만약 데이터가 20000개가 있고, 맨 마지막 데이터를 조회하고자한다면, 20000번 조회를 해야하는거겠죠? 대신 뒤에서부터 조회한다면 어떨까요? 즉, 앞쪽의 데이터를 조회할 떄는 앞에서부터, 뒤쪽의 데이터를 조회할 때는 뒤에서부터 찾아나갈 수 있는 리스트가 더블 링크드 리스트 입니다. 이전 기본 연결 리스트의 노드에는 데이터와 next 주소만 있었다면, 더블 연결 리스트에는 prev 주소도 함께 저장됩니다. 이전 기본 연결 리스트에서는, self.head()만 지정했다면, 더블 연결 리스트에는 self.t..
![[Concept] 재귀함수와 연결리스트(linked list)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnDewt%2FbtraRjvGnxz%2Fxg8ISkoBdwEkImmmLwVLB1%2Fimg.png)
[Concept] 재귀함수와 연결리스트(linked list)
패스트 캠퍼스 알고리즘 강의를 듣고 정리한 글입니다. 재귀함수 재귀란 컴퓨터 과학에 있어서 재귀는 자신을 정의할 때 자기 자신을 재참조하는 방법을 뜻하며, 이를 프로그래밍에 적용한 재귀 호출의 형태로 많이 사용된다. - 위키백과 - 재귀함수는 함수가 자신을 정의할 때 다시 자신(함수)을 호출하는 함수입니다. 자칫하면 무한 반복이 될 수 있기 때문에 종료 조건을 무조건 추가해주어야 합니다. 하나의 예를 봅시다. def recursive(data): if data
[Concept] 생성자와 소멸자
생성자는 객체 생성 시 자동으로 호출되고, 소멸자는 객체 소멸 시 자동으로 호출됩니다. 생성자 생성자는 __init__(self) 이것도 메서드이니까 첫번 째 인자는 self로 둡니다. 생성자에서는 보통 해당 클래스가 다루는 데이터를 정의합니다. 사각형 class를 적어보겠습니다. class Quadrangle: width = 0 height = 0 color = "black" square = Quadrangle() # 객체 생성 클래스의 attribute 초기화 클래스의 attribute(width, height, color)를 정의하려면 어떻게 해야할까요? class Quadrangle: self.width = 0 self.height = 0 self.color = "black" # Error. 클래..
[Concept] 배열 - 큐와 스택
#자료구조_배열 [파이썬의 배열] 리스트 활용 1차원, 2차원까지는 알고 있으면 좋다. 같은 종류의 데이터를 순차적으로 저장한다. Q. 왜 필요한가? A. 같은 종류의 데이터를 효율적으로 관리하기 위해 사용하기 위해! [단점] 데이터 추가/삭제의 어려움 미리 최대 길이를 지정해야 하는 점 Q. Why? A. 삭제 시, 뒤에 있던 데이터를 앞당겨야하기 때문이다. [장점] 인덱스를 통해 빠른 접근 가능하다. 첫 데이터의 위치에서 상대적인 위치로 데이터에 접근(인덱스 번호로 접근)한다. # 자료구조_큐(Queue) [큐] 줄을 서는 행위와 유사 FIFO(First-In, First-Out) 또는 LILO(Last-in, Last-Out) 방식. 스택 Q.큐에 값을 넣은 상태에서, 데이터를 꺼내라는 명령을 내리..
[Concept] 자료구조와 알고리즘
# 자료구조와 알고리즘 [자료구조] Data Structure, 데이터 구조 효율적인 데이터 관리의 예 학생에게 학년&반&번호를 부여하는 것 우편번호 대표적인 자료구조 : 배열, 스택, 큐, 링크드 리스트, 해쉬테이블, 힙 [알고리즘] 어떤 문제를 풀기 위한 절차와 방법 사람마다 문제를 다르게 푸는데, 이 풀이 방법들 중 좋은 알고리즘의 기준은 시간과 공간! 즉, 메모리 공간과 시간 복잡도를 고려하는 것이다. 어떤 자료구조와 알고리즘을 쓰느냐에 따라, 성능이 달라지기 때문에 "자료구조"와 "알고리즘"이 중요한 것. Q. 코딩테스트를 왜 하나요? A. 개발자는 어떤 문제를 해결할 수 있는 능력을 업으로 하기 때문에, 이를 평가 하기 위해 자료구조와 알고리즘을 성능이 좋은 코드로 작성할 수 있느냐!를 검증하..