목록분류 전체보기 (138)
DOing
파이썬은 여러가지 표준 라이브러리들을 제공하고 있는데 그중 대표적인 라이브러리와 제공되는 함수들에 대해 알아보겠다. 💡 내장함수 : 기본 입출력함수부터 정렬함수까지 기본적인 함수들을 제공해준다. a=[1,2,3] result = sum(a) min_result = min(a) max_result = max(a) # eval() : 실제 수식을 계산해준다. result = eval("3*5+7") # sorted() : 각 원소를 정렬 result = sorted(a) #오름차순 result = sorted(a, reverse=True) #내림차순 # sorted() with key # 람다 형태로 넣어주는 경우가 많다 array = [('홍길동', 35), ('이순신', 75), ('아무개', 50)] ..
💡 우선순위 큐? 일반적인 큐는 First-In-First-Out구조이지만, 우선순위 큐(Priority Queue)는 우선순위가 높은 데이터가 먼저나오는 구조이다. 우선순위 큐를 배열이나 연결리스트로 구현할 시에는 우선순위에 맞게 데이터를 삽입하는 시간이 오래걸리게 된다. 때문에 우선순위 큐는 힙을 이용해서 구현한다. 💡 힙? 힙은 최대값과 최소값을 빠르게 찾기 위해 고안된 완전이진트리이다. (=변형된 트리의 형태) [ 힙의 구조 ] : 최대값을 구하기 위한 구조인 최대힙과 최소값을 구하기 위한 구조인 최소힙이 있다. 힙은 다음과 같이 두가지 조건을 가지고 있는 자료구조이다. (최대힙 기준) 1) 부모노드는 자식노드의 값보다 크거나 같다. 2) 완전 이진 트리형태 [ 힙과 이진 탐색 트리 비교 ] * ..
💡 트리 : 트리는 Node와 Branch를 이용해서, 사이클을 이루지 않도록 구성한 데이터 구조이다. Level : 루트노드부터 현재 노드까지의 깊이 Height(높이) : 트리에서 노드가 가질 수 있는 최대 Level : 해당 트리의 높이는 3이다. 💡 이진트리(Binary Tree) : 이진트리는 노드의 최대 브랜치가 2인 트리이다. Q1. 이진트리에 있는 각 레벨의 최대 노드의 개수는? 레벨이 k일때, 각 레벨에 최대로 들어갈 수 있는 노드의 개수는 2^k 개이다. 1 Level 0 -> 1개 2 3 Level 1 -> 2개 4 5 6 7 Level 2 -> 4개 8 9....... 14 15 Level 3 -> 8개 Level k -> 2^k 개 Q2. 높이가 h이고 꽉 차있는 이진 트리라면, ..
💡 해쉬 테이블? : 해시테이블은 키에 대한 데이터를 저장하는 데이터구조이다. : 키를 해시함수로 연산하여 해시 값을 알아내고, 이를 기반으로 키에 대한 데이터값을 알아낼 수 있다. : 즉, 키를 통해 데이터를 바로 알아낼 수 있어 속도가 획기적으로 빨라진다. : 파이썬의 딕셔너리 타입이 바로 해시테이블구조로 구현 되어있다. 💡 해쉬 테이블 구현하기 class Dict: def __init__(self): self.items = [None] * 8 def put(self, key, value): index = hash(key) % len(self.items) self.items[index] = value def get(self, key): index = hash(key) % len(self.items) ..
시간 복잡도는 알고리즘 복잡도 중에 하나이다. 이번 포스팅에서는 알고리즘 복잡도에서부터 시간복잡도, 빅오 표기법에 대해서 알아보자. 🌱 알고리즘 복잡도? 하나의 문제를 푸는 알고리즘은 다양할 수 있다. 다양한 알고리즘 중 어느 알고리즘이 더 좋은지를 판단하기 위한 평가방법이다. 이러한 알고리즘의 복잡도를 계산하는 다양한 방법들이 있다. 그중에 가장 중요한 것 두개를 꼽자면, 1) 시간 복잡도 : 알고리즘 실행속도 2) 공간 복잡도 : 알고리즘이 사용하는 메모리 사이즈 -> 예전에는 메모리가 비쌌기때문에 이게 중요하기도 했다. -> 하지만 공간복잡도는 요즘엔 잘 계산하지않고 시간 복잡도를 주로 계산한다. 시간복잡도 표기법에는 Big O 표기법, 오메가 표기법, 세타 표기법이 있다. Big O 표기법은 최악..
💡 Linked List(연결리스트) 배열(array)은 미리 공간을 예약해놓고 그 공간에 데이터를 쓰고 읽는다. 링크드 리스트(linked list)는 미리 예약을 해놓지않고 필요할때마다 데이터를 추가할 수 있는 구조다. 배열은 데이터만 저장하지만, linked list는 (데이터+다음 데이터를 가르키는 주소)를 저장한다. - 노드 : 데이터 저장단위(데이터값, 포인터)로 구성 - 포인터 : 각 노드안에서 다음이나 이전데이터의 주소를 가지고 있는 공간 💡 링크드리스트 장단점 장점: 1) 미리 공간을 할당하지않아도된다. 2) 연속된 공간을 할당할 필요도 없다. 단점: 1) 저장공간의 효율이 높지않다. -> 데이터 뿐만아니라 주소를 위한 공간이 필요하기 때문이다. 2) 접근 속도가 느리다. -> 배열은 인..
💡 배열(Array) 배열은 같은 종류의 데이터를 순차적으로 저장하는 데이터 구조이다. [ 배열의 장점 ] : 인덱스를 통한 빠른 접근 가능 [ 배열의 단점 ] : 데이터 추가/삭제가 쉽지않다. : 미리 최대 길이를 지정해야한다. 파이썬은 배열보다 추가적인 기능을 제공하기 때문에 이 단점이 와닿지 않을 수 있다. country='US'; country=country+'a' 하지만 본래의 C에서는 이러한 배열의 단점이 와닿는다. #include int main(int argc, char * argv[]){ char country[3] ='US'; # 미리 최대길이를 지정해야한다, 이 길이를 넘을 수 없다. printf("%c%c\n", country[0], country[1]); retrun 0; } 파이..
약 4달간 진행해온 Spring 팀 프로젝트를 마치고 있습니다. 그에 대한 회고를 해보려고 합니다. [ 계기 ] 웹 개발로 진로를 정하고 가장 먼저 했던 고민은 '그래서 무슨 언어를 선택하지?' 였습니다. 이에 대한 답은 대학시절 가장 많이 좋아했던 Java였습니다. 재학생 시절 c, c++, java, python, (약간의 js)를 모두 배우는 동안 가장 매력을 느꼈던것은 java를 앞으로 더 사용해보고 싶었습니다. 그 다음은 사용할 프레임워크를 선택하고자 하였습니다. 자바의 대표적인 프레임워크는 'Spring Framework'입니다. 요즘에는 스프링 부트도 많이 사용하는 추세이고, 초보자들은 스프링 부트로 시작하는 것이 편하다라는 말을 많이 듣고 스프링부트를 시작하였습니다. 하지만 처음 인프런의 ..