일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 1644 파이썬
- 백준 2096
- android hilt
- 1003 파이썬
- 1753 파이썬
- 코루틴 플로우
- 자바
- 안드로이드 hilt
- 백준 5582
- git local remote
- 이진 탐색
- 2096 파이썬
- 백준 1644
- Android mvp
- 자료구조
- Jetpack Room
- 1806 백준
- Android Room
- 1806 투포인터
- 6588 파이썬
- 투포인터 알고리즘
- 5582 파이썬
- 10819 파이썬
- Coroutine Flow
- 백준 10819
- flow buffering
- java
- 1806 파이썬
- 1753 다익스트라
- 5582 DP
- Today
- Total
목록전체 글 (101)
Gemstone's Devlog
https://www.acmicpc.net/problem/1003 1003번: 피보나치 함수 각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다. www.acmicpc.net 이 문제는 규칙성을 이용하는 DP 문제이다. 우선 그림을 한 번 그려보자. N에 따라서 0과 1이 어떻게 되는지 보자. 이 규칙성을 가지고 DP를 사용하여 구현하면 풀이는 다음과 같다. t = int(input()) for _ in range(t): cnt_0 = [1, 0] cnt_1 = [0, 1] n = int(input()) if n > 1: for i in range(n - 1): cnt_0.append(cnt_1[-1]) cnt_1.append(cnt_0[-2] + cnt_1[-1]..
https://www.acmicpc.net/problem/5582 5582번: 공통 부분 문자열 두 문자열이 주어졌을 때, 두 문자열에 모두 포함된 가장 긴 공통 부분 문자열을 찾는 프로그램을 작성하시오. 어떤 문자열 s의 부분 문자열 t란, s에 t가 연속으로 나타나는 것을 말한다. 예를 들 www.acmicpc.net 이 문제는 DP로 접근해야하는 문제이다. 이중 for문을 돌다가 같은 문자를 만나게 되면 그전까지의 공통 부분 문자열 길이 +1을 dp에 저장한다. 파이썬 코드 ans = 0 s1, s2 = input(), input() dp = [[0] * (len(s2) + 1) for _ in range(len(s1) + 1)] for i in range(1, len(s1) + 1): for j ..
예제 1 : 간단한 코루틴 아주 간단한 코루틴을 수행해봅시다. 코루틴을 만드는 가장 간단한 함수는 runBlocking이라고 합니다. 이렇게 코루틴을 만드는 함수를 코루틴 빌더라고 합니다. runBlocking은 코루틴을 만들고 코드 블록이 수행이 끝날 때까지 runBlocking 다음의 코드를 수행하지 못하게 막습니다. 그래서 블로킹(blocking)인거죠. import kotlinx.coroutines.* fun main() = runBlocking { println(Thread.currentThread().name) println("Hello") } 스레드 이름이 main @coroutine1 입니다. 메인 스레드에서 수행되는데 뒤에 수식어 @coroutine1 이 붙어 있습니다. 예제 2 : 코루..
https://www.acmicpc.net/problem/1806 1806번: 부분합 첫째 줄에 N (10 ≤ N < 100,000)과 S (0 < S ≤ 100,000,000)가 주어진다. 둘째 줄에는 수열이 주어진다. 수열의 각 원소는 공백으로 구분되어져 있으며, 10,000이하의 자연수이다. www.acmicpc.net 이 문제는 전형적인 투포인터 알고리즘으로 접근해야하는 문제이다. 우선 투포인터 알고리즘 개념을 다시 정리해보자. 투포인터 (Two Pointers) 리스트에 순차적으로 접근해야 할 때 두 개의 점의 위치를 기록하면서 처리하는 알고리즘 정렬되어 있는 두 리스트의 합집하에도 사용됨. 병합정렬(merge sort)의 conquer 영역의 기초가 되기도 함 예제 문제 - 특정한 합을 가지는..
https://developer.android.com/kotlin/coroutines?hl=ko Android의 Kotlin 코루틴 | Android 개발자 | Android Developers Android의 Kotlin 코루틴 코루틴은 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴입니다. 코루틴은 Kotlin 버전 1.3에 추가되었으며 다른 언어에서 확 developer.android.com 우선 코루틴의 정의를 알아보기 위해 안드로이드 개발자 홈페이지에 들렸다. 코루틴에 대한 대략적인 설명이다... 이젠 기능에 대해서 알아보자. 1) 경량 : 실행 중인 스레드를 차단하지 않는 정지를 지원, 단일 스레드에서 많은 코루틴을 실행 가능. 정지는 많은 ..
https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net 이 문제는 분할정복으로 접근해야 하는 문제이다. 풀이 방법은 다음과 같다. 1. 모두 0이나 1로 되어있지 않은 경우(조건이 만족하지 않은 경우) 4개로 쪼개서 다시 푸는 방식이다. 조건이 만족하지 않는 경우 괄호 "("를 넣고, 4개로 쪼개고 나서 각 처리를 다 하고 나면, 다시 괄호 ")"를 넣는다. 2. 4개로 쪼개는 것은 재귀함수를 호출하여 풀고, 전달 인자로 그 사분면의 가장..
https://www.acmicpc.net/problem/2133 2133번: 타일 채우기 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. www.acmicpc.net 이 문제는 전형적인 타일링 문제이고 다이나믹 프로그래밍으로 접근해야 한다. 그러나 다른 타일링 문제에 비해 점화식을 생각해내기가 어려웠다. 우선 그림을 그려보았다. 파이썬 풀이 n = int(input()) dp = [0] * 31 dp[2] = 3 for i in range(4, n+1, 2): dp[i] = dp[i-2] * 3 + sum(dp[:i-2]) * 2 + 2 print(dp[n])
https://codeforces.com/problemset/problem/768/B 이 문제는 쉽게 말하면 자연수 n을 받으면 n으로 비트열을 만드는 문제이다. (x mod 2 : x를 2로 나눈 나머지) 문자열을 다 구할 수는 없다. n이 2의 50승까지 가능하기때문에. 희한한 방법으로 풀어야한다. n, l, r이 주어졌을 때 재귀로 풀어낼 것이다. C++ 코드 #include #include using namespace std; long long solve(long long n, long long l, long long r) { long long temp, len, mid; temp = n / 2; len = 1; while (temp > 0) { len = len*2 + 1; temp /= 2; ..
이 문제는 분할 정복 알고리즘으로 접근할 수 있다. 만약 가로로 칠하는 게 있다면, 그 stroke는 제일 밑에 있어야만 한다. 결국, 제일 작은 높이까지는 가로로 다 칠해줘야 한다. 가로가 없는 경우 -> 세로만 있는 경우니깐 답은 n 가로가 있는 경우 -> 최대한 칠할 수 있을 때까지 다 가로로 칠해준다. 남은 부분은 또 다음과 같이 나눌 수 있다. 결국 divide and conquer문제!! = 재귀로 풀 수 있다. C++ 풀이 #include #include using namespace std; int n; int a[5001]; int solve(int x[], int size) { int i, min_num, ans, p, q; min_num = 1000000000; for (i = 0; i..
https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 그림판으로 예제에 대한 그림을 한 번 그려보았다. 이 문제는 우선순위 큐로 접근해야하는 문제이다. 문제 풀이 방법은 다음과 같다. 우선 보석들과 가방들의 무게에 따라 리스트를 정렬한다. 임시 temp 리스트를 만들고 가장 무게가 작은 가방부터 순서대로 모든 보석들을 넣어본다. (단, max_heap 우선순위 큐를 사용하며, 보석의 무게가..