💡 데이터란?글자와, 숫자로 이루어진 기호들의 집합💡 알고리즘 이란?어떤 문제를 해결하기 위한 절차살펴보게 될 알고리즘, 데이터 구조 관련 알고리즘 (데이터 추가, 탐색, 삭제 알고리즘)"Smart data structures and dumb code works a
💡배열이란? 연속적인 주소의 메모리에 원소들이 순차적으로 저장되어 있는 데이터 구조.배열의 특징 1\. 배열 안에 있는 원소에 대해 상수 시간의 접근 가능하다. 2\. 동적이지 않다. 배열을 사용해서 만든 리스트 중간에 원소를 추가하거나 삭제할 때 많은 복사가 일
💡Array Deque이란? 배열(a) 기반으로 List인터페이스를 구현한 것. Head, Tail 둘 중 어느곳에 원소를 조작하는 것이 더 효율적인지에 따라 인터페이스를 구현함.Array Deque 특징 1\. 효율적인 add, remove가 가능. 2\. Arra
📚 단순 연결 리스트 >💡연결 리스트란? > 원소 및 다음 노드로의 링크를 저장하고 있는 노드들로 이루어진 데이터 구조. >* 링크? 노드가 컴퓨터 메모리상에서 어떤 주소로 저장되어있는가를 담고있는 정보.(포인터 = 메모리상에 주소) >* 특징 get(i), s
📚 1. 해시테이블 >💡 해시테이블 이란? 원소의 저장 위치가 원소값에 의해 결정되는 데이터 구조를 뜻한다. >💡 해시테이블 특징? 충돌이 없다면, 원소에 대한 접근과 저장을 상수 시간 O(1)에 할 수 있다. 충돌이 있다면 즉 저장하고자 하는 자리에 이미 다른
💡 정렬배열이 나오게 된 배경원소들의 순서를 유지해야 하는 경우가 있을 수 있음.선형 계열 데이터 구조를 사용하고 원소가 삽입될 때마다 정렬하는 방법. 정렬의 O(nlogn) 시간이 소요. 정렬된 형태를 유지하는 구조가 필요.💡 정렬배열이란원소가 항상
💡 이진검색트리 도입 배경어떤 데이터의 순서가 정렬된 정렬배열에서는 시간복잡도가 O(n)만큼 소요됐었고, 이를 보안하기 위해 도입됨.💡 이진검색트리란트리의 모든 노드u에 대해 u의 값이 u.left를 루트로 하는 서브트리의 모든 노드 값보다 크고, u.right를
💡 우선순위 큐 이란?큐와 비슷하지만 원소들이 우선순위를 가지고 있음.큐는 먼저 들어온 원소가 먼저 처리되는 FIFO구조.우선순위 큐는 나중에 들어온 원소라도 우선순위가 높을 경우 먼저 처리됨. 힙은 우선순위 큐를 구현하는데 사용됨. 💡 힙 이란?이진(b
📚 1. 재귀 호출이란 > 💡 재귀 호출 또는 재귀(recursion) 함수 정의 내에서 함수 자신을 호출하는 경우 루프를 구현하기 위해 사용 어떤 문제를 풀기 위해 풀어야 하는 부분 문제(subproblem)가 원래 문제와 같은 형태를 띄고 있을 때 사용. 데이터
💡 정렬이란?주어진 원소들을 일정한 순서대로 나열하는 것오름 차순 정렬 : 값이 커지는 순서로 정렬.내림 차순 정렬 : 값이 작아지는 순서로 정렬.💡 선택정렬 이란?가장 큰 원소를 맨 끝으로 보내는 정렬 방식위와 같이 가장 큰 수를 찾아 가장 오른쪽으로 보내는 과정
💡 힙정렬이란?주어진 배열을 최소힙으로 만든 뒤, 힙에서 원소들을 하나씩 제거하며 정렬을 수행하는 방법는 것반복적으로 힙의 루트 원소를 배열에 저장하고 삭제 연산 수행💡 힙정렬의 시간 복잡도?힙 삭제 연산의 시간 복잡도 : O(logn)정렬을 수행하기 위해 수행하는
📚 1. 팀정렬 > 💡 팀정렬이란? Python의 정렬 알고리즘으로 구현됨. 아이디어: 삽입정렬과 병합연산 (병합정렬에서 두 배열을 합치는데 사용됨)을 결합. 점근적인 시간복잡도는 O(nlogn)으로 병합정렬 힙정렬과 동일하지만 평균적인 성능에는 차이가 있음. >
💡 신장트리(spanning tree)그래프의 간선을 '정점 수 - 1' 만큼 남겨 만든 트리ex) 너비우선트리, 깊이우선트리💡 최소 신장트리(spanning tree)간선들의 가중치 합이 가장 작게 되도록 만든 신장트리ex) 여러 가구에 전력을 공급하기 위한 공급
💡 TSP 문제란?Travelling Saleman Problem해밀토니안 싸이클 : 그래프의 모든 정점을 방문하고 돌아오는 싸이클TSP는 가장 짧은 헤밀토니안 싸이클을 찾는 문제다음과 같은 그래프에 각 정점들이 도시가 되고, 한 세일즈맨이 각 도시들을 여행하고 돌아
💡 문제의 종류를 알아야 하는 이유어떤 문제가 다항식 시간안에 해결될 수 없다는 것을 안다면, 최적의 알고리즘을 찾느라 노력을 들이는 대신 대안이 될 수 있는 근사 알고리즘을 사용함으로써 노력을 허비하는 것을 막을 수 있음💡 시간의 종류상수(costant)시간 :
📚 유효한 팰린드롬 문제풀이 💡 팰린드롬? 앞뒤가 똑같은 단어나 문장으로, 뒤집어도 같은 말이 되는 단어 또는 문장 💡 풀이1 : 일반 배열을 활용 > 🗣️ isalnum()은 영문사, 숫자 여부를 판별하는 함수로, 이를 이용해 해당하는 문자만 추가한다. >
예시 문자열 : 'h','e','l','l','o' -> 'o','l','l','e','h'💡 풀이1 : 투 포인터를 이용한 스왑🗣️ 투 포인터는 단어 그대로 두 개의 포인터를 이용해 범위를 조정해가며 풀이하는 방식을 말함.💡 풀이2 : 파이썬 내장 메소드 rev
💡 로그를 재정렬하라. 기준은 다음과 같다.규칙로그의 가장 앞 부분은 식별자다.문자로 구성된 로그가 숫자 로그보다 앞에 온다.식별자는 순서에 영향을 끼치지 않지만, 문자가 동일할 경우 식별자 순으로 한다.숫자 로그는 입력 순서대로 한다입력 : logs = "dig1
📚 Big O 💡 Big O는 컴퓨터 알고리즘에서 매우 중요한 개념으로, 두 개의 코드를 비교하는 방법론이다. 예를 들어, 같은 역할을 수행하는 더 읽기 쉬운 코드1 과 더 간결하고 코드 수가적은 코드2가 있는데, Big O는 이러한 코드들을 수학적으로 얼마나 효율
📚 Big O(1) 💡 O(n), O(n^2)은 n이 커지면 O가 증가한다. 하지만 O(1)은 추가만 하는 경우이다. 💡 O(1)은 constant 시간이라고도 한다. 그 말은 n이 증가해도 작업수는 항상 일정함을 뜻한다. > 🗣️ 가장 효율적인 빅 O >
📚 Different Terms for Inputs 이전에 봤던 O(2n)에 경우와는 다르게, 위에 함수는 두 개의 파라메터를 가지고 있기 때문에, 위와 같은 경우는 O(a + b)로 최대한 단순화 할 수 있다. 위 같은 경우도, 서로 다른 파라메터가 두 개 주어
📚 class 💡 대부분의 데이터 구조는 클래스를 사용해서 만들어진다. 💡 클래스를 만든다는 것은, 나만의 데이터 타입을 만드는 것과 같다. 📚 pointer 💡 구체적으로 데이터 타입에 따라 포인터가 어떻게 다르게 작동하는지에 대하여. > num1 = 1
💡 1/3을 십진 소수점으로 나타낸 결과 :0.3333333333 이 무한으로 발생하고, 우리는 이를 보기 십게 나타내기 위해, 반올림등을 활용하고, 이 과정에서 오차가 발생하게 됨.💡 9.625를 이진수로 변환:정수 부분 : 9 = (2^3 + 2^0) 이므로,
💡 Linked List 특징Linked List는 인덱스를 가지고 있지 않다.Linked List에 노드는 메모리에 연속적으로 저장되지 않고 사방에 흩어져서 저장된다.Linked List에는 Head라는 변수가 있고, 이는 첫 번째 노드를 가르킨다. Linked L
💡 노드는 값과 포인터로 이루어져 있다. 노드는 근복적으로는 딕셔너리 자료형 이다. 위 Linked List는 다음과 같은 딕셔너리 자료형으로 볼 수 있다. 위에 딕셔너리 형과, 실제 Linked List 구문은 다를 수 있지만 메모리 상에서 다른 곳에 저장할 것이라