재귀 용법 (Recursive call, 재귀 호출) 고급 정렬 알고리즘에서 재귀 용법을 사용 한다. 함수 안에서 동일한 함수를 사용 예제 def factorial(num): if num > 1 : return num * factorial(num-1) else: return num 시간 / 공간 복잡도 모두 O(n-1)이므로, 둘다 O(n)이 된다. def function(입력): if 입력 > 일정값: return function(입력-1) else: return 일정값 재귀 호출은 내부적으로 스택처럼 관리 된다. 파이썬에서 재귀 호출의 최대 깊이는 1000회이다. (즉, 스택 공간이 1000개) def palindrome(data): pal_data = data[::-1] if data == pal_..
버블정렬 두 인접한 데이터를 비교해서 앞에 있는 데이터가 뒤에 있는 데이터보다 크면, 자리를 바꾸는 정렬 알고리즘 즉, 한 회전 당 제일 큰값을 뒤로 보낸다. 데이터 길이 -1 만큼 턴한다. def bubblesort(data): for index in range(len(data) -1): swap = False for index2 in range(len(data) - index -1): if data[index2] > data[index2 +1]: data[index2], data[index2+1] = data[index2+1], data[index2] swap=True if swap == False: break return data 알고리즘 분석 반복문이 두 개 O(n^2) 최악의 경우 : n(n-1..
자료구조 vs 객체 자료구조 vs 객체 //자료구조 public interface Vehicle { double getFuelTankCapacityInGallons(); double getGallonsOfGasoline(); } public class Car implements Vehicle { double fuelTankCapacityInGallons; double gallonsOfGasoline; public double getFuelTankCapacityInGallons() { return this.fuelTankCapacityInGallons; } public double getGallonsOfGasoline() { return this.gallonsOfGasoline; } } 자료구조는 값을 가..
환경 설정 JDK (Java SE 16 사용) https://www.oracle.com/kr/java/technologies/javase-jdk16-downloads.html Download the Latest Java LTS Free Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 global access to the experts. www.oracle.com JAVA_HOME PATH Android Studio https://developer.android.com/studio Download Android Studio & App Tools - Android Developers Android Stu..
트리 구조 트리 : Node 와 Branch를 이용해서, 사이클을 이루지 않도록 구성한 데이터 구조 주로 이진 트리 형태의 구조로 탐색 알고리즘 구현에서 많이 사용 된다. 트리 용어 Node : 데이터를 저장하는 요소 Root Node : 최상위 노드 (레벨 0) Level : 노드의 깊이 Sibling (Brother Node) : 동일한 부모를 가진 노드 Depth : 트리에서 Node를 가질 수 있는 최대 레벨 이진트리와 이진 탐색 트리 이진 트리 (Binary Tree) : 최대 브랜치가 2인 트리 이진 탐색 트리 : BST (이진 트리에 추가적인 조건이 있는 트리) 왼쪽 노드는 해당 노드보다 작은 값, 오른쪽 노드는 해당 노드보다 큰 값 장점 : 탐색 속도 개선 단점 : 복잡하다. class N..
해시 테이블 키(Key)에 데이터(Value)를 저장하는 데이터 구조 Key를 통해 바로 데이터를 받아올 수 있으므로, 속도가 획기적으로 빨라진다. 파이썬 딕셔너리 타입이 해쉬 테이블의 예 보통 배열로 미리 Hash Table 사이즈 만큼 생성 후에 사용 (공간과 탐색 시간을 맞바꾸는 기법) 블록 체인에서 사용 파이썬에서는 해쉬를 별도로 구현할 이유가 없다. 딕셔너리 자체가 해쉬테이블 용어 Hash : 임의의 값을 고정 길이로 변환 Hash Table : 키 값의 연산에 의해 직접 접근이 가능한 데이터 구조 해싱 함수 : 키에 대해 산술 연산을 이용해 데이터 위치를 찾을 수 있는 함수 해쉬 값 또는 해쉬 주소 : 키를 해싱 함수로 연산해서, 해쉬 값을 알아내고 키에 대한 위치를 일관성있게 찾을 수 있다...
Communication Communicate = to share 모스부호 -> 전기신호(아날로그 통신) -> 컴퓨터(디지털 통신) 아날로그 통신 - 주파수 디지털 통신 - 0과 1의 비트 값 통신을 위한 5가지 요소 송신자, 수신자, 전송매체 , 메세지, 약속(프로토콜) 컴퓨터 네트워크에서는 노드와 링크 (노드: 컴퓨터(송,수신), 링크: 네트워크 케이블(전송매체), 메시지(비트열), 프로토콜(tcp/ip)) 실제 송신, 수신 사이에 여러 노드들이 존재 한다. 노드의 종류 (1. Terminal (단순 전달, 스스로 계산X) , 2. Host (컴퓨터), 3. Device(네트워크 상의 여러 장치 - 허브, 스위치, 브릿지, 라우터 등)) 프로토콜 통신을 원활하게 연결해주는 S/W - 통신 규약 식별(..
포맷팅이 중요한 이유 가독성에 필수적이다. 코드를 잘못해석해 버그를 발생할 여지를 줄인다! 클린코드 포맷팅 200라인 이하로 유지하자. 코드길이가 200라인을 넘어간다면, 클래스가 여러가지 일을 하고 있을 가능성이 높다. SRP (클래스 단일 책임 원칙) 위배! 밀접한 개념은 서로 가까이 둔다. 행 묶음은 완결된 생각 하나를 표현하기 때문에 개념은 빈 행으로 분리 변수는 사용되는 위치에서 최대한 가까이 선언한다. Java Class Declarations Class 내부 코드 순서 (static - instance - 생성자 - 메서드) static 변수 public -> protected -> private 순서 instance 변수 public -> protected -> private 순서 생성자 ..