Developing Myself Everyday
2225번: 합분해 - Kotlin
백준/DP 2023. 6. 7. 14:27

2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제 0부터 N까지의 정수 K개를 더해서 그 합이 N이 되는 경우의 수를 구하는 프로그램을 작성하시오. 덧셈의 순서가 바뀐 경우는 다른 경우로 센다(1+2와 2+1은 서로 다른 경우). 또한 한 개의 수를 여러 번 쓸 수도 있다. 입력 첫째 줄에 두 정수 N(1 ≤ N ≤ 200), K(1 ≤ K ≤ 200)가 주어진다. 출력 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. 나의 풀이 이 문제는 DP를 사용해야 하는 문제이다. 이 문제의 특징은 한 개의 수를 여러 번 쓸 수 있고, 0을 포함할 수 있다는 것이다. 이 말은 만약 입력이 [1, 4] 가 들어간다고 했을 ..

article thumbnail
Android App Architecture (안드로이드 앱 아키텍처)
Android 2023. 6. 7. 12:09

앱 아키텍처 가이드 | Android 개발자 | Android Developers 앱 아키텍처 가이드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 가이드에는 고품질의 강력한 앱을 빌드하기 위한 권장사항 및 권장 아키텍처가 포함 developer.android.com 앱의 구성요소는 개별적이고 비순차적으로 실행될 수 있으며, 운영체제나 사용자가 언제든지 앱 구성요소를 제거할 수 있다. 이러한 이벤트는 직접 제어할 수 없기 때문에 앱 구성요소에 애플리케이션 데이터나 상태를 저장해서는 안 되며 구성요소가 서로 종속되면 안된다고 안드로이드는 말한다. ✔ 4가지의 일반 아키텍처 원칙 그래서 안드로이드의 앱은 견고성을 높이며 앱을 더 쉽게 테스트할 수 있도록 아키텍처를 정의하는..

article thumbnail
RxJava에 대해
Android/Kotlin 2023. 6. 6. 20:44

RxJava에 대한 공부를 시작하는 이유 요즘 프로젝트를 진행하면서 Retrofit2를 이용해 서버와 통신을 많이 진행하고 있다. 네트워크 요청은 Call 객체를 통해 비동기적으로 수행되고, enqueue() 메서드를 호출해 비동기로 요청을 실행하거나 execute() 메서드를 호출하여 동기적으로 실행할 수 있다. 예시는 아래와 같다. interface MyApiService { @GET("users/{id}") fun getUser(@Path("id") userId: String): Call } val BASE_URL = "baseurl" val retrofit = Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFacto..

11054번: 가장 긴 바이토닉 부분 수열 - Kotlin
백준/DP 2023. 6. 6. 18:25

11054번: 가장 긴 바이토닉 부분 수열 첫째 줄에 수열 A의 크기 N이 주어지고, 둘째 줄에는 수열 A를 이루고 있는 Ai가 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ Ai ≤ 1,000) www.acmicpc.net 문제 수열 S가 어떤 수 Sk를 기준으로 S1 Sk+1 > ... SN-1 > SN을 만족한다면, 그 수열을 바이토닉 수열이라고 한다. 예를 들어, {10, 20, 30, 25, 20}과 {10, 20, 30, 40}, {50, 40, 25, 10} 은 바이토닉 수열이지만, {1, 2, 3, 2, 1, 2, 3, 2, 1}과 {10, 20, 30, 40, 20, 30} 은 바이토닉 수열이 아니다. 수열 A가 주어졌을 때, 그 수열의 부분 수열..

article thumbnail
[Kotlin Coroutine] (5) - Channel (채널)
Android/Kotlin 2023. 6. 6. 14:00

채널이란? 채널은 2개의 코루틴 사이를 연결할 수 있는 파이프 같은 것이다. 임의의 데이터 스트림을 코루틴 사이에 공유할 수 있다. 만약 채널 내부의 용량이 다 찼는데 데이터를 채널에 보내려고 하면, 채널은 현재 코루틴을 일시 중단시키고 나중에 재개하게 된다. 이 부분이 자바의 동시성 API에서의 Blocking Queue와 채널의 가장 큰 차이이다. 채널의 타입 채널의 타입은 크게 4가지로 나눌 수 있다. 1. Buffered 2. Rendezvous (Unbuffered) 3. Unlimited 4. Conflated 이제부터 이 4가지의 타입을 어떻게 사용하는지 알아보겠다. 1. Buffered 고정된 크기의 버퍼를 생성하는 타입이다. 아래의 예제를 보자 fun main() { runBlocking..

[Kotlin Coroutine] (4) - 예외 처리
Android/Kotlin 2023. 6. 5. 16:54

예외 처리의 경우, 코루틴 빌더들은 다음의 전략을 따른다 1. 부모 코루틴이 자식에게 발생한 오류와 동일한 오류로 취소된다. 2. 자식들이 모두 취소되면 부모는 예외를 코루틴 트리의 윗부분으로 전달한다. 아래의 코드를 보면서 이해해보자 코드 fun main() { runBlocking { launch { throw Exception("A에 에러 발생") println("A 완료") } launch { delay(1000) println("B 완료") } println("메인") } } 결과 메인 Exception in thread "main" java.lang.Exception: A에 에러 발생 위의 코드를 보게 되면 최상위 코루틴이 "A 완료" 를 시작하기 전에 예외가 발생한다. 이로 인해 최상위 코루..

1890번: 점프 - Kotlin (DFS)
백준/DP 2023. 6. 5. 12:40

1890번: 점프 첫째 줄에 게임 판의 크기 N (4 ≤ N ≤ 100)이 주어진다. 그 다음 N개 줄에는 각 칸에 적혀져 있는 수가 N개씩 주어진다. 칸에 적혀있는 수는 0보다 크거나 같고, 9보다 작거나 같은 정수이며, 가장 www.acmicpc.net 문제 N×N 게임판에 수가 적혀져 있다. 이 게임의 목표는 가장 왼쪽 위 칸에서 가장 오른쪽 아래 칸으로 규칙에 맞게 점프를 해서 가는 것이다. 각 칸에 적혀있는 수는 현재 칸에서 갈 수 있는 거리를 의미한다. 반드시 오른쪽이나 아래쪽으로만 이동해야 한다. 0은 더 이상 진행을 막는 종착점이며, 항상 현재 칸에 적혀있는 수만큼 오른쪽이나 아래로 가야 한다. 한 번 점프를 할 때, 방향을 바꾸면 안 된다. 즉, 한 칸에서 오른쪽으로 점프를 하거나, 아래..

2623번: 음악프로그램 - Kotlin (위상 정렬)
백준/정렬 2023. 6. 5. 11:56

2623번: 음악프로그램 첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한 www.acmicpc.net 문제 인터넷 방송 KOI(Korea Open Internet)의 음악 프로그램 PD인 남일이는 자기가 맡은 프로그램 '뮤직 KOI'에서 가수의 출연 순서를 정하는 일을 매우 골치 아파한다. 순서를 정하기 위해서는 많은 조건을 따져야 한다. 그래서 오늘 출연 예정인 여섯 팀의 가수에 대해서 남일이가 보조 PD 세 명에게 각자 담당한 가수의 출연 순서를 정해오게 하였다. 보조 PD들이 가져온 것은 아래와 같다. 1 4 3 6 2 5 4 2 3 첫..