Heap 힙의 조건 complete binary tree(완전 이진 트리)이며, heap property(min heap 또는 max heap)를 만족 동일한 데이터를 가진 여러개의 힙이 존재 가능 힙에서 각 노드의 위치 H(1..n) 루트 노드 : H(1) H(i)의 부모 : H(i/2) H(i)의 왼쪽 자식 : H(2i) H(i)의 오른쪽 자식 : H(2i+1) 힙은 일차원 배열로 표현 가능 A[0..n] 루트 노드 : A[0] A[i]의 부모 : A[(i-1)/2] A[i]의 왼쪽 자식 : A[2i]+1 A[i]의 오른쪽 자식 : A[2i]+2 Max Heapify (힙 정렬) 왼쪽과 오른쪽 자식 트리가 모두 max heap property를 만족하고, root만이 조건을 만족하지 않을 때, 이 트..
분할 정복법 기본적으로 순환(recursion)을 통해 해결 문제 해결을 위해 아래 세 단계를 거침 분할 : 해결하고자 하는 문제를 작은 크기의 동일한 문제들로 분할 정복 : 각각의 작은 문제들을 순환적으로 해결 합병 : 작은 문제의 해를 합하여 전체 문제의 해를 구함 Merge Sort (합병 정렬) 배열의 크기가 1이 될 때까지 분할 후 합병을 진행하며 정렬된 원래의 리스트 완성 (분할정복법) 구현 두 부분으로 나뉘어 정렬되어 있는 배열을 합쳐가며 정렬된 하나의 배열로 만드는 알고리즘 //이미 정렬된 인덱스가 p에서 q까지인 배열1과 q+1에서 r까지인 배열2를 합치면서 정렬하는 함수 private static void merge(int[] data, int p, int q, int r) { int ..
Selection Sort (선택 정렬) 최대 원소를 찾아 맨 오른쪽 원소와 자리를 바꿈 맨 오른쪽으로 이동한 원소를 무시한채로 위의 루프 실행을 반복 구현 크기가 큰 원소를 오른쪽부터 정렬 크기가 작은 원소를 왼쪽부터 정렬 위의 두가지 방식으로 구현 가능 public class Sort_selectionSort { private static int data[] = {7, 1, 3, 5, 9, 2}; //최대 원소를 맨 오른쪽으로 이동시키며 정렬 public static void selectionSortMax(int[] data, int length) { int max; //값이 최대인 원소 int temp; for(int i=data.length-1; i>0; i--) { //맨 오른쪽 원소부터 왼쪽에..
DataBinding 레이아웃의 UI 구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 라이브러리 UI 프레임워크 호출이 필요없어지기 때문에 파일이 단순화되고 유지보수가 쉬워짐 앱 성능이 향상되며 메모리 누수 및 null 포인터 예외 방지 build.gradle에 라이브러리를 추가하여 사용 apply plugin: 'kotlin-kapt' android { ... dataBinding { enabled = true } } RecyclerView에 DataBinding 적용하기 item_news_list.xml DataBinding을 쓸 xml 코드를 layout으로 감싼 후 작성 ... data 태그 안에 만드는 레이아웃 내에서 사용할 속성들을 변수로 만듬 "@{}" 에 미리 선언한 data 변수를 이..
Maze 아래와 같은 구조의 미로를 나가는 길을 찾는 것이 목표 흰색은 지날 수 있는 길이며, 파란색은 막혀있는 벽 입구는 [0][0]이며 출구는 [N-1][N-1] 구현 무한 루프에 빠지지 않으려면 반드시 base case로 수렴해야함 이 경우에서는 이미 방문한 cell을 표시하여 무한 반복을 해결 public class Maze { /* * 현재 위치에서 출구까지 가는 경로가 있으려면 * 1) 현재 위치가 출구이거나 (base case) * 2) 이웃한 4개의 cell들 중 하나에서 현재 위치를 지나지 않고 출구까지 가는 경로가 있거나 (recursive) */ private static int N = 8; private static int [][] maze = { {0, 0, 0, 0, 0, 0, ..
지난 스터디에 각자 공부한 내용을 바탕으로 만들어온 문제를 정리한다! Q1. jin, won, chan, sion 을 항목으로 가진 리스트를 만들고, map 함수를 이용하여 다음과 같이 출력하세요. 친구의 이름 -> JIN 친구의 이름 -> WON 친구의 이름 -> CHAN 친구의 이름 -> SION A1. val friends = listOf("jin", "won", "chan", "sion") friends.map{ friend -> "친구의 이름 -> " + friend.toUpperCase() }.forEach{ println(it) } Q2. getNum(a = true, success = { //a가 true일 때 실행 print(it) }, fail = { //a가 false일 때 실행 pr..
이번주 스터디에서는 MVVM패턴 공부를 시작했다 MVVM 패턴 구조 View : 사용자와 상호작용하는 UI, 데이터 변화 감지를 위한 옵저버를 가짐 (ex. Activity, Fragment) Model : 앱에서 사용하는 데이터와 그 데이터를 처리(통신)하는 역할 (ex. dataClass, Repository) Repository : 데이터 API를 가지는 클래스, 뷰모델은 DB에 직접 접근하지 않고 repository에 접근하여 앱의 데이터를 관리 View Model : 뷰와 모델 사이의 인터페이스, 데이터바인딩을 전달하며 뷰를 그리기 위한 데이터를 처리하는 역할 Live Data : 관찰이 가능한(Observable) 데이터 홀더 클래스, 데이터가 변경될때마다 내부적으로 자동으로 알려줌 동작 Vi..
스트림 함수 컬렉션에 포함된 자료의 타입 변경 또는 새로운 자료 추가 생성을 쉽게 구현하기 위해 제공되는 함수 변환 map() : 컬렉션 내 인자를 함수에 정의된 규칙에 따라 다른 값 혹은 타입으로 변환할 때 사용 val cities = listOf("Seoul", "Tokyo", "Mountain View") //도시 이름을 대문자로 변환 //출력 결과 : SEOUL TOKYO MOUNTAIN VIEW cities.map{ city -> city.toUpperCase() } .forEach{ println(it) } //도시 이름을 받아, 원소를 각 도시 이름의 문자열 길이로 변환 //출력 결과 : length=5 length=5 length=13 cities.map{ city -> city.lengt..