전체 235

[백준] 1463 (1로 만들기)

#1 알고리즘 동적 프로그래밍 (Dynamic Programming), 상향식(Bottom-up) 및 하향식(Top-down) 접근#1 알고리즘 #1-1 정의 동적 프로그래밍을 한 줄 요약하면 중복의 제거다. 정적(static)이라는 개념과 반대되는 개념으로서, 동적(dynamic)이라는 단어가 이름에 붙었다. 확실히 static이 붙을 만한 작업kenel.tistory.com하향식 동적 프로그래밍을 구현해 풀었다. 이 문제가 까다로운 이유는, 하향식 동적 프로그래밍에서 캐싱(Caching)을 할 때, 어떤 값을 캐싱해야할 지 난감하다는 것이다. 여러가지 경우들 중에서 최솟값을 골라서 캐싱해야 하는데 그 구현이 처음 문제를 봤을 땐 꽤 복잡해보였다. 나는 ArrayList에 재귀호출의 return값들을 ..

[백준] 2630 (색종이 만들기)

#1 알고리즘색종이를 정직하게 가로 절반 세로 절반씩 자르기 때문에 어렵지 않은 문제다. 이 정직한 조건이 없었더라면 훨씬 까다로웠을 것이다. 아래의 재귀 함수를 이용해 문제를 풀었다. 1. 색종이가 단색인 지 확인하고, 맞다면 해당 색의 갯수를 +1 하고 함수를 종료한다.2-1. 현재 색종이를 가로 절반 세로 절반 자른 좌측 상단(↖) 색종이 범위에 대해 재귀 호출을 수행한다.2-2. 현재 색종이를 가로 절반 세로 절반 자른 좌측 하단(↙) 색종이 범위에 대해 재귀 호출을 수행한다.2-3. 현재 색종이를 가로 절반 세로 절반 자른 우측 상단(↗) 색종이 범위에 대해 재귀 호출을 수행한다.2-4. 현재 색종이를 가로 절반 세로 절반 자른 우측 하단(↘) 색종이 범위에 대해 재귀 호출을 수행한다. #2 코..

[백준] 21736 (헌내기는 친구가 필요해)

#1 알고리즘재귀 함수를 이용해 푼다. 그 함수의 시작점은 도연이의 좌표다. 함수의 내용은 아래와 같다. 1. 매개변수로 받은 좌표가 캠퍼스 영역을 벗어났거나, 값이 'X'면 함수를 종료한다.2. 해당 좌표에 새내기가 있다면 '새내기 카운트'를 +1한다.3. 이제 해당 좌표는 더 볼 일 없으므로 좌푯값에 'X'를 대입한다.4-1. 현재 좌표에서 한 칸 동쪽 좌표를 인수로 가지는 재귀 호출을 수행한다. 4-2. 현재 좌표에서 한 칸 서쪽 좌표를 인수로 가지는 재귀 호출을 수행한다.4-3. 현재 좌표에서 한 칸 남쪽 좌표를 인수로 가지는 재귀 호출을 수행한다.4-4. 현재 좌표에서 한 칸 북쪽 좌표를 인수로 가지는 재귀 호출을 수행한다. #2 코드 - 코틀린var n: Int = -1var m: Int = ..

[백준] 1074 (Z)

#1 알고리즘N = 2 이상인 큰 문제를, N = 1이 될 때까지 작은 문제로 쪼개어 푼다. 그러려면 f(큰 문제) = 작은 문제인 f(x)를 알아야 한다. 규칙을 수식으로 표현해내어야 한다. '바둑판'의 영역을 4개로 나누어보자. 그리고 각 영역의 맨 ↖에 있는, 영역의 첫 원소들을 비교한다. 영역 m ~ 영역 (m + 1) 간 첫 원소의 값 차이는 N = 1일 때 1, N = 2일 때 4, N = 3일 때 16, N = 4일 때 64 ... 다. 이를 일반화하면 영역 간 첫 원소의 값 차이(interAreaFirstElementDifference)는 2(N-1)*2이다. 즉 어떤 영역 m에 있어, 칸마다 써진 수는 (영역 0의 수) + m * 2(N-1)*2다. 보라색 글씨 부분을 축적된(accumu..

[Android] Room - 반환 값이 있는 INSERT

#1 INSERT의 반환값 [Android] Room - Entity, DAO, Database#1 이전 글 [Android] Room - 기초, INSERT와 DELETE 연습 # Room 소개 Room을 사용하여 로컬 데이터베이스에 데이터 저장 | Android Developers Room 라이브러리를 사용하여 더 쉽게 데이터를 유지하는 방법 알아보kenel.tistory.comRoom의 DAO의 어떤 메소드들은 Long 또는 List형 return을 가질 수 있다 (위 게시글의 #5-1 참조). 아래에 있는 샘플 앱을 수정하여 @Insert 어노테이션이 붙은 메소드의 return을 Long으로 두고, 해당 return을 화면에 표시하게 만들어본다. #2 수정할 샘플 앱 [Android] Room -..

[Android] RecyclerView - notifyDataSetChanged()

#1 이전 글 [Android] RecyclerView - Adapter에 인자(Argument) 전달#1 이전 글 [Android] RecyclerView - 기초#1 ListView vs RecyclerView 화면에 요소(Item)을 100개 표현한다고 해보자. ListView나 GridView 등의 전통적인 Container Widget들은 이 100개의 아이템을 모두 불러온(load)다. 그kenel.tistory.com이전 게시글에선 Item의 List를 Adapter의 인자로 전달했었다. 이 때, 위 게시글의 완성된 앱을 수정해서 Item의 List가 여러 번 바뀌는 경우를 생각해보겠다. #2 Item의 List의 빈번한 변경#2-1 개요위와 같이 맨 위의 버튼을 누르면, RecyclerVi..

[Android] ViewModel - View에 Event 발생시키기

#1 샘플 앱 [Android] ViewModel - View에 객체(ViewModel) 전달#1 개요 #1-1 Data Binding과 ViewModel [Android] Data Binding - View에 객체 전달 #1 객체 전달의 필요성 #1-1 이전 글 Data Binding - 기초 #1 데이터 바인딩 사용 전 #1-1 예시 앱 위과 같은 간단한 앱이 있다. Button을kenel.tistory.com아래에 있는 코드들은 위 게시글의 완성된 앱을 기반으로 수정된 것들이다. #2 목표 (수정할 부분)// package com.example.eventwithviewimport androidx.lifecycle.MutableLiveDataimport androidx.lifecycle.ViewMod..

[Android] Room - UPDATE 연습

#1 이전 글 [Android] Room - 기초, INSERT와 DELETE 연습#1 Room 소개 Room을 사용하여 로컬 데이터베이스에 데이터 저장 | Android Developers Room 라이브러리를 사용하여 더 쉽게 데이터를 유지하는 방법 알아보기 developer.android.com SQLite는 모바일 기기를 위한 kenel.tistory.com이전 게시글의 완성된 앱을 기반으로, 미구현한 RecyclerView를 구현하고, Entity에 UPDATE문까지 적용시켜본다. #2 개요 [Android] RecyclerView - 기초#1 ListView vs RecyclerView화면에 요소(Item)을 100개 표현한다고 해보자. ListView나 GridView 등의 전통적인 Cont..

[Android] Room - Entity, DAO, Database

#1 이전 글 [Android] Room - 기초, INSERT와 DELETE 연습#1 Room 소개 Room을 사용하여 로컬 데이터베이스에 데이터 저장 | Android Developers Room 라이브러리를 사용하여 더 쉽게 데이터를 유지하는 방법 알아보기 developer.android.com SQLite는 모바일 기기를 위한 kenel.tistory.com본 게시글은 Room의 기본을 담은 앱을 만들기 위한 이전 게시글에서 이어진다. 여기서 Room의 3가지 핵심 클래스인 Entity 클래스, DAO 클래스, Database 클래스의 구현을 다룬다. 이전 게시글에서 모듈 수준 build.gradle.kts에서 필요한 라이브러리를 다운로드해야 본 게시글을 진행할 수 있다. #2 Entity, DA..

[Android] Room - 기초, INSERT와 DELETE 연습

#1 Room 소개 Room을 사용하여 로컬 데이터베이스에 데이터 저장 | Android DevelopersRoom 라이브러리를 사용하여 더 쉽게 데이터를 유지하는 방법 알아보기developer.android.comSQLite는 모바일 기기를 위한 SQL Database 엔진이다. SQLite는 수 많은 Android 기기에 탑재되어있다. 안드로이드 개발자라면 SQLite를 잘 다룰 수 있어야 한다. 하지만, SQLite를 생으로 다루는 것은 쉽지 않다. 반복되는 Database Query문 등과 같은 많은 상용구 코드를 반복적으로 적어주어야 하기 때문이다. 그렇기에, Database 작업에 많은 시간이 소요된다. 이상적인 그림이 아니다. 이런 문제를 개선하기 위해서, 구글의 Room Database p..