1. 힙 (Heap)이란? 힙 : 데이터에서 최대값과 최소값을 빠르게 찾기 위해 고안된 완전 이진 트리(Complete Binary Tree) 완전 이진 트리 : 노드를 삽입할 때 최하단 왼쪽 노드부터 차례대로 삽입하는 트리 힙을 사용하는 이유 배열에 데이터를 넣고, 최대값과 최소값을 찾으려면 O(n)이 걸림 이에 반해, 힙에 데이터를 넣고, 최대값과 최소값을 찾으면, O(logn)이 걸림 우선순위 큐와 같이 최대값 또는 최소값을 빠르게 찾아야 하는 자료구조 및 알고리즘 구현 등에 활용됨 2. 힙 (Heap) 구조 힙은 최대값을 구하기 위한 구조 (최대 힙, Max Heap) 와, 최소값을 구하기 위한 구조 (최소 힙, Min Heap)로 분류할 수 있음 힙은 다음과 같이 두 가지 조건을 가지고 있는 자..
1. 트리 (Tree) 구조 트리 : Node와 Branch를 이용해서, 사이클을 이루지 않도록 구성한 데이터 구조 실제로 어디에 많이 사용되나? 트리 중 이진 트리(Binary Tree)형태의 구조로, 탐색(검색) 알고리즘 구현을 위해 많이 사용됨 2. 알아둘 용어 Node : 트리에서 데이터를 저장하는 기본 요소 (데이터와 다른 연결된 노드에 대한 Branch 정보 포함) Root Node : 트리 맨 위에 있는 노드 Level : 최상위 노드를 Level 0으로 하였을 때, 하위 Branch로 연결된 노드의 깊이를 나타냄 Parent Node : 어떤 노드의 다음 레벨에 연결된 노드 Child Node : 어떤 노드의 상위 레벨에 연결된 노드 Leaf Node : (Terminal Node) : ..
1. 해쉬 테이블 키(Key)에 데이터(Value)를 매핑할 수 있는 데이터 구조 해쉬 함수를 통해, 배열에 키에 대한 데이터를 저장할 수 있는 주소(인덱스 번호)를 계산 Key를 통해 바로 데이터가 저장되어 있는 주소를 알 수 있으므로, 저장 밑 탐색 속도가 획기적으로 빨라짐 미리 해쉬 함수가 생성할 수 있는 주소(인덱스 번호)에 대한 공간을 배열로 할당한 후, 키에 따른 데이터 저장 및 탐색 지웑 2. 알아둘 용어 해쉬 함수(Hash Function) : 임의의 데이터를 고정된 길이의 값으로 리턴해주는 함수 해쉬(Hash), 해쉬 값(Hash Value), 또는 해쉬 주소(Hash Address) : 해싱 함수를 통해 리턴된 고정된 길이의 값 해쉬 테이블(Hash Table) : 키 값의 연산에 의해..
1. 알고리즘 복잡도 계산이 필요한 이유 하나의 문제를 푸는 알고리즘은 다양할 수 있음 정수의 절대값 구하기 1, -1 >> 1 방법1 : 정수값을 제곱한 값에 다시 루트를 씌우기 방법2 : 정수가 음수인지 확인해서, 음수일 때만 -1을 곱하기 다양한 알고리즘 중 어느 알고리즘이 더 좋은지를 분석하기 위해, 복잡도를 정의하고 계산함 2. 알고리즘 복잡도 계산 항목 시간 복잡도 : 알고리즘 실행 속도 공간 복잡도 : 알고리즘이 사용하는 메모리 사이즈 가장 중요한 시간 복잡도를 꼭 이해하고 계산할 수 있어야 함. 알고리즘 시간 복잡도의 주요 요소 반복문이 지배합니다. - 자동차로 서울에서 부산을 가기 위해, 다음과 같이 항목을 나누었을 때, 가장 총 시간에 영향을 많이 미칠 것 같은 요소는? 자동차로 서울..
Python의 특징 - 플랫폼과는 독립적인 언어이다 - 인터프리터 언어이다 - 컴파일러와 인터프리터언어의 차이점 컴파일러 인터프리터 소스코드를 기계어로 먼저번역 해당 플랫폼에 최적화되어 프로그램을 실행 작동방식 별도의 번역과정 없이 소스코드를 실행시점에 해석하여 컴퓨터가 처리할 수 있도록함 실행속도가 빠름 한번의 많은 기억장소 필요 장점 단점 간단히 작성, 메모리가 적게 필요 실행속도가 느림 C, 자바, C++, C# 주요 언어 파이썬,스칼라 - 객체 지향 동적 타이핑 언어 객체 지향언어 : 실행 순서가 아닌 단위 모듈 중심으로 프로그램을 작성 -> 하나의 객체는 어떤 목적을 달성하기 위한 행동과 속성을 가지고 있음 동적 타이핑 언어 : 프로그램이 실행하는 시점에 프로그램이 사용해야 할 데이터에 대한 타..
1. 마법의 엘리베이터 👉 소스코드 public int solution(int storey) { int answer = 0; int nextCnt = 0; int flag = 0; if(storey = 5 && tmp > 50) { nextCnt = 1; } } if(storey % 10 5) { answer += 10 - (storey % 10); flag = 1; } storey /= 10; // 5일때 다음 자리수 값 if(nextCnt == 1) { storey += 1; nextCnt = 0; } // 5보다 큰수일때 그 다음 자리수 if(flag == 1) { storey += 1; flag = 0; } }..