전체 글
-
[Programmers] [Kotlin] 유사 칸토어 비트열알고리즘/프로그래머스 2023. 3. 22. 23:02
난이도 : Level 2 푼 방법 : 분할 정복(?) 아이디어 1. 11011이 반복되는 형태이므로, 5^n의 비트열을 5단으로 쪼갠다. 2. 현재 탐색해야할 지점을 x로 한다면, 5^n에서 x의 위치를 단으로 나타낸다. 3. 문단 0,1,2,3,4 기준으로 2는 항상 0이 그려져 있으므로 2에 위치해 있다면 0 4. 2가 아닌 다른 위치라면 이 탐색 과정을 반복하면 11011로 도달. 5. 만약 11011에서도 1에 위치해 있다면 탐색 종료. 코드 구현 class Solution { fun solution(n: Int, l: Long, r: Long): Int { var answer: Int = 0 var num = Math.pow(5.toDouble(),(n-1).toDouble()).toLong()..
-
Android Package프로젝트/영어단어 잠금화면 2022. 12. 9. 15:50
영어단어 잠금화면을 재개하면서, 기존 Package를 정리하는데 있어 고민하던 점을 기록해보고자 한다. 현재 패키지 방식은 Android의 권장 방식에 맞춰 data Layer, domain Layer(선택적), UI Layer(Presentation으로 표기) 3가지의 패키지 방식을 차용한 뒤, Data Injection은 따로 패키지를 만들어 사용했다. 또한, 공통적으로 사용하는 클래스 or 상수의 개념은 Constants 패키지를 만들어 Sealed Class를 통한 UiState와 Request 상황 대처 및 전역 상수를 Singleton으로 만들어 사용하고 있다. data, domain은 기존 하던대로 각 역할별로 구분해 패키지화를 진행했고, 이는 다음과 같다. 해당 패키지는 계층별로 분리를 진..
-
Android TV에서 RecyclerView Focus Loss 현상 해결?안드로이드/흐름 2022. 5. 30. 15:15
최근 개발을 하면서 가장 해결하기 어려웠던 과제 중 하나였다. RecyclerView에서 오른쪽으로 Long Click을 통해 스크롤을 할 시 requestLayout() improperly called by View during layout: running second layout pass requestLayout() improperly called by View during layout: posting in next frame (View 자리는 requestLayout이 부적절하게 불린 View의 Id로 채워진다. ) 해당하는 오류가 생겼고, 그 오류가 처음 발생한건, Glide를 통해 Image를 Focus에 따라 바꿔줌에 있어서 발생하였다. 또, TextView에 대한 marquee 설정을 Foc..
-
BOJ 21921 블로그알고리즘/백준 2022. 2. 11. 16:06
21921번: 블로그 (acmicpc.net) 21921번: 블로그 첫째 줄에 $X$일 동안 가장 많이 들어온 방문자 수를 출력한다. 만약 최대 방문자 수가 0명이라면 SAD를 출력한다. 만약 최대 방문자 수가 0명이 아닌 경우 둘째 줄에 기간이 몇 개 있는지 출력한다 www.acmicpc.net 슬라이딩 윈도우 기법으로 풀면 간단하다. 맨 처음은 그렇게 생각해서 문제를 풀었는데 슬라이딩 윈도우 알고리즘이 잘 생각이 되지 않아서 다이나믹 프로그래밍(?) 기법으로 풀어냈다. 먼저 dp 배열의 각 index는 1~index까지의 합계이다. 여기서 구간 합을 구하게 되는데 구간의 크기가 고정되어 있다보니 점화식을 다음과 같이 만들 수 있었다. int num = dp[i] - dp[i-k]; 여기서 i < k인..
-
BOJ 1238 파티알고리즘/백준 2022. 1. 28. 20:00
1238번: 파티 (acmicpc.net) 1238번: 파티 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 10,000), X가 공백으로 구분되어 입력된다. 두 번째 줄부터 M+1번째 줄까지 i번째 도로의 시작점, 끝점, 그리고 이 도로를 지나는데 필요한 소요시간 Ti가 들어 www.acmicpc.net 처음에는 문제를 잘못 이해해서 단순히 x번 집에서 다른 집으로 가는 최소 거리를 구하면 된다는 생각에 그래프의 정보로 들어오는 시작점과 도착점을 반대로 해 Node를 생성하는 방식을 채택했다. 그리고 결과를 보고 나서 문제를 다시 한 번 봤는데 알고보니 갔다가 다시 돌아오는 것이어서 방법을 바꿨다. 그런데 생각을 해보니 기존에 했던 방식은 우리가 2번으로 도착했다가 다시 돌아갈 수 있는 경..
-
BOJ 9177 단어 섞기알고리즘/백준 2022. 1. 26. 19:29
9177번: 단어 섞기 (acmicpc.net) 9177번: 단어 섞기 입력의 첫 번째 줄에는 1부터 1000까지의 양의 정수 하나가 주어지며 데이터 집합의 개수를 뜻한다. 각 데이터집합의 처리과정은 동일하다고 하자. 각 데이터집합에 대해, 세 개의 단어로 이루어 www.acmicpc.net 오래전에 풀지 못했던 문제를 해결하는 과정에서 문자열인데 DFS를 사용한다는 것이 내 입장에서는 특이한 것 같았다. 이 문제를 맨 처음 풀었을 때, 나는 단순히 세 번째 단어의 길이만큼 조사하여 이러한 경우들을 그대로 반영했다. 1. 첫 번째 단어의 현재 위치의 문자와 같을 경우 2. 두 번째 단어의 현재 위치의 문자와 같을 경우 여기서 맨 처음 떠올랐던 건 두 단어 문자가 같을 경우는 어떻게 하지?라는 점이었고, ..
-
BOJ 1613 역사알고리즘/백준 2022. 1. 21. 23:55
10159번: 저울 (acmicpc.net) 10159번: 저울 첫 줄에는 물건의 개수 N 이 주어지고, 둘째 줄에는 미리 측정된 물건 쌍의 개수 M이 주어진다. 단, 5 ≤ N ≤ 100 이고, 0 ≤ M ≤ 2,000이다. 다음 M개의 줄에 미리 측정된 비교 결과가 한 줄에 하나씩 www.acmicpc.net 만약 이 저울 문제를 플로이드-워셜 알고리즘을 통해 풀었었다면 이번 문제는 간단한 응용이다. 저울 문제에서 기존의 플로이드-워셜 알고리즘을 이용한 부분은 상하관계를 설정하고, O(N^3) 동안 기존 거리를 구하던 공식을 바꾸는 것에서부터 시작하였다. for ( int i = 1; i
-
BOJ 11404 플로이드알고리즘/백준 2022. 1. 20. 23:21
11404번: 플로이드 (acmicpc.net) 11404번: 플로이드 첫째 줄에 도시의 개수 n이 주어지고 둘째 줄에는 버스의 개수 m이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 출발 도시의 번호가 www.acmicpc.net 플로이드-워셜 알고리즘을 가장 대표할 수 있는 문제다. 플로이드-워셜 알고리즘은 향후 블로그에서 다룰거지만 그래프 탐색에서 한 지점에서 다른 지점으로 갈 수 있는 모든 최단 거리를 알고 싶을 때 사용하는 알고리즘으로 O(N^3)의 시간 복잡도를 가지고 있으므로, 현재 보이는 n의 크기가 100 이상을 넘어가게 되면 사용하는 것이 까다롭다. 여기서 중요한 점은 한 지점에서 같은 지점으로 가는 버스는 없고, 한 지점에서..