전체 233

[Android] LiveData - 기초

#1 개요#1-1 LiveData LiveData 개요  |  Android 개발자  |  Android DevelopersLiveData를 사용하여 수명 주기를 인식하는 방식으로 데이터를 처리합니다.developer.android.comLiveData. 문서적인 정의는 Data의 변경을 관찰할 수 있는 데이터 홀더 클래스고, 말 그대로 해석하면 살아있는(live) 데이터(data)다. Activity, Fragment, Service에 있는 Data, 예를 들어 어떤 변수 A가 있고 그 A를 어떤 TextView에 표시해놓은 상황을 생각해 보자. A의 값이 변경되면, TextView에 변경된 A값을 다시 할당해야한다. LiveData는 그 귀찮은 할당 과정을 프로그래머가 생략할 수 있게 만들어준다. L..

[Android] ViewModel - 뷰 모델에 인자(Argument) 전달 (ViewModelFactory)

#1 ViewModelProvider 클래스 분석#1-1 수정할 샘플 앱 [Android] View Model - 기초#1 View Model의 필요성#1-1 예제버튼을 누르면 TextView의 text가 1씩 증가하는 예시 앱이다. MainActivity.kt 코드는 다음과 같다. // package com.example.viewmodelbasics import androidx.appcompat.app.AppCompatActivity import androkenel.tistory.com위 게시글의 '완성된 앱'을 수정해서, ViewModel 클래스가 인자(Argument)를 받게 만들어본다. 그냥 class sampleViewModel(args: Int) : ViewModel() { ... }와 같이 ..

[Android] ViewModel - 기초

#1 View Model의 필요성#1-1 예제버튼을 누르면 TextView의 text가 1씩 증가하는 예시 앱이다. MainActivity.kt 코드는 다음과 같다. // package com.example.viewmodelbasicsimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport androidx.databinding.DataBindingUtilimport com.example.viewmodelbasics.databinding.ActivityMainBindingclass MainActivity : AppCompatActivity() {    private lateinit var binding: ActivityMai..

[Android] Data Binding - View에 객체 전달

#1 객체 전달의 필요성#1-1 이전 글 Data Binding - 기초#1 데이터 바인딩 사용 전 #1-1 예시 앱 위과 같은 간단한 앱이 있다. Button을 누르면, EditText의 text가 바로 위에 있는 TextView의 text에 대입된다. 이 앱의 코드는 다음과 같다. #1-2 activity_main.xml #1-3 Mainkenel.tistory.com이전 글에서 이어진다. 이전 글에선, 데이터 바인딩을 통해 View의 레퍼런스를 일괄적으로 가져와 참조할 수 있었다. 이번에는 반대로 View에게 객체를 보낸다. 아래의 예시 앱을 보자.  #1-2 예시 앱이 앱은 어떤 책 클래스의 객체를 받아 화면에 표시하는 앱이다. 화면 아래에 있는 버튼들을 누르면 화면 위 쪽의 TextView들의 ..

[Android] Data Binding - 기초

#1 데이터 바인딩 사용 전#1-1 예시 앱위과 같은 간단한 앱이 있다. Button을 누르면, EditText의 text가 바로 위에 있는 TextView의 text에 대입된다. 이 앱의 코드는 다음과 같다. #1-2 activity_main.xml                             #1-3 MainActivity.kt// package com.example.databindingpracticeimport androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport android.widget.Buttonimport android.widget.EditTextimport android.widget.TextViewclass Ma..

[백준] 1676 (팩토리얼 0의 개수)

#1 알고리즘#1-1 문제의 핵심이 문제의 핵심은, x!가 가지고 있는 2*5 쌍의 갯수만큼 뒤에 0이 붙는다는 규칙의 파악이다. #1-2 상향식 동적 프로그래밍 동적 프로그래밍 (Dynamic Programming), 상향식(Bottom-up) 및 하향식(Top-down) 접근#1 알고리즘 #1-1 정의 동적 프로그래밍을 한 줄 요약하면 중복의 제거다. 정적(static)이라는 개념과 반대되는 개념으로서, 동적(dynamic)이라는 단어가 이름에 붙었다. 확실히 static이 붙을 만한 작업kenel.tistory.com상향식 동적 프로그래밍을 구현해 풀었다.  #2 코드 - 코틀린val twoCounts = Array(501) {0}val fiveCounts = Array(501) {0}// 2*5 ..

그래프 - 그래프의 종류와 표현

#1 그래프#1-1 그래프그래프는 현상이나 사물을 정점(Vertex)와 간선(Edge)로 표현하는 것이다. 정점은 어떤 개체를 나타내고, 간선은 그 개체들 간의 관계를 나타낸다. 위 그림은 각 정점(도시)을 항공편(간선)이 잇는 모습을 표현한 예이다. n개의 정점 집합 V와 이들 간에 존재하는 간선의 집합 E로 구성된 그래프 G를 G = (V, E)로 기술한다. #1-2 가중치가 없는 그래프 vs 가중치가 있는 그래프간선에는 가중치를 줄 수 있다. 항공편으로 비유하자면, 운항비가 가중치가 된다. 가중치가 없는 그래프를 가중치가 있는 그래프처럼 생각할 수도 있다. 모든 가중치를 1로 보면 된다. #1-3 무향 그래프 vs 유향 그래프항공편은 반드시 양방향적이지는 않다. 예를 들어 런던에서 파리를 갈 수 있..

[백준] 18110 (solved.ac)

#1 알고리즘 힙 정렬 (Heap Sort)#1 알고리즘 #1-1 힙(heap)이라는 영어 단어의 사전적 의미는 쌓아 놓은 무더기다. 그리고 이 단어는 프로그래밍에서도 사용된다. 첫째로 메모리 영역에서, 둘째로 자료구조에서다. 이 둘은 서로 다kenel.tistory.com힙 정렬을 사용했다. 힙 정렬 대신 병합 정렬을 사용할 수도 있다. #2 여담문제는 쉬워보이는데, 2024년 1월 8일 기준 정답률이 26퍼센트 밖에 되지 않는다. 그래서 문제를 풀기 전에 함정이 숨어있나싶었다. 그런 건 없었다. 문제의 이름이 solved.ac라서 사람들의 관심을 샀나보다. 그리곤 그 사람들이 그대로 가볍게 코드 제출을 해본 게 아닐까? 문제의 조건 자체는 쉽지만, 시간 초과가 나지 않게 하기 위한 빠른 정렬 기법 그..

[백준] 1874 (스택 수열)

#1 알고리즘1. 어떤 스택에는 '이상한' 규칙이 있다. 바로 해당 스택에 push하는 원소의 값이 순서대로 1, 2, 3, ... , n여야 한다는 규칙이다. 즉, 맨 처음 스택에 push하는 값은 반드시 1이어야 하며, 1 다음에는 2, 2 다음에는 3, ... , 62 다음에는 63을 push해야 한다.
2. 반면, pop에 대한 규칙은 없다. 스택이 비어있는 상태에서 pop을 하는게 아닌 이상, 아무렇게나 해도 된다.
3. (1)의 규칙은 (스택에 들어 있는 원소들 중 가장 나중에 push된 값 + 1)을 push하는 규칙이 아님에 유의한다. 예를 들어 1, 2, 3을 차례대로 push하고 pop을 2번 한 상황이 있다. 여기서 추가적으로 push를 하려는 경우, 그 값은 2가 아니라 4다.4. ..

[백준] 1966 (프린터 큐)

#1 알고리즘#1-1 큐 [백준] 10845 - 큐#1 알고리즘 java.util.Stack과는 달리 java.util.Queue는 클래스가 아니라 인터페이스다. 나는 java.util.Queue 인터페이스를 구현한 클래스인 LinkedList를 Queue로서 사용했다. last()는 확장 함수(Extension functions)kenel.tistory.com큐(Queue)가 사용되었다는 점에서 비슷한 문제다. #1-2 목표 문서의 인덱스프린트할 목표 문서의 인덱스를 어떤 변수 A로 두고 추적할 수도 있다. 하지만 이러면 Queue가 offer되거나 poll될 때에 바뀌는 목표 문서의 위치에 맞게 A의 값을 계속 조정해주어야 한다. 이는 가독성에 나쁜 영향을 미치고, 그래서 에러의 여지를 키운다. 나는..