본문 바로가기

전체 글

(50)
Compose로 RecyclerView 대체해보기 안드로이드에서 반복되는 뷰를 구현하기 위해서는 RecyclerView를 사용합니다. 이를 사용하기 위해서는 RecyclerViewAdapter, ViewHolder 등 관련된 부수적인 것들을 구현해야 했습니다. 그런데 RecyclerView가 아주 많이 활용하는 뷰이다 보니 관련 코드 양도 그만큼 많아지는 문제가 있었습니다. 이제는 RecyclerView 대신 Compose를 사용하면 반복되는 뷰를 간단하게 구현할 수 있다고 합니다. 얼마나 쉽게 이런 뷰를 구현할 수 있는지 Compose 공부도 할 겸, 마인드가든의 복잡한 코드를 개선해 보겠습니다. 글을 읽기 전 - 공부를 하며 작성 중이라 글 중간에 나오는 코드는 최종 결과물이 아닐 가능성이 높습니다. 최종 코드는 깃헙을 참고해 주세요 - 마인드가든에..
[git] personal access token 사용하기 1. access token 발급 우측 상단 프로필 클릭 Settings 클릭 좌측 메뉴에서 Developer Settings 클릭 Personal access tokens 클릭 Generate new token 만료기간과 scope 설정 Generate token 토큰 복사 2. mac 에서 keychain 모드 사용하기 keychain access란? 사용자의 암호 및 계정 정보를 저장하는 mac os 앱 1. 키체인 사용하도록 설정하기 $ git config --global credential.helper osxkeychain 2. 키체인에 Personal Access Token 사용하는 항목 추가하기 $ git credential-osxkeychain store 엔터 후 아래 내용 입력 이때 복사..
정렬 알고리즘 활용 문제 풀이 BOJ 10989 수 정렬하기 3 Arrays.sort 로도 풀리지만 counting sort를 사용하는 방법도 있다. counting sort의 시간복잡도는 O(n + k)으로 매우 빠른 정렬 방식이지만 수의 범위만큼 메모리를 차지하기 때문에 범위가 제한되어 있고 1000만이하일 때 사용하는 것이 좋다 import java.io.* fun main() = with(BufferedReader(InputStreamReader(System.`in`))) { val n = readLine().toInt() val count = IntArray(10001) repeat(n) { count[readLine().toInt()]++ } val bw = BufferedWriter(OutputStreamWriter(Sy..
이분탐색과 응용 Binary Search 정렬되어 있는 배열에서 특정 데이터를 찾기 위해 탐색 범위를 절반으로 줄여나가며 찾는 탐색 방법 탐색을 진행할 수록 범위는 절반으로 줄어들기 때문에 시간복잡도는 O(logN)이다 Parametric Search 최적화 문제를 결정 문제로 바꾸어 해결하는 것 최적화 문제 : 조건을 만족하는 특정 수의 최소 / 최댓값을 구하는 문제 문제 예시 : 어떤 수열에서 30보다 큰 수를 찾는다 할 때 그 중 제일 작은 수는 무엇인가? 결정 문제로 바꾸기 (yes or no로 답을 내릴 수 있는 문제): 어떤 수 x는 30보다 큰가? 결정 문제로 바꾸면 이분 탐색을 활용하여 탐색 범위를 좁혀가며 답을 효율적으로 찾을 수 있다. 이분 탐색 활용 문제 풀기 BOJ 1920. 수 찾기 직접 구현한 ..
그래프 그래프란 정점(vertex/node)과 간선(edge)으로 이루어진 자료구조로 원소 사이 연결관계 표현 시 유용하다. 차수(degree) : 각 정점에 대해 간선으로 이어진 정점의 수 그래프 표현 리스트 혹은 행렬로 표현이 가능하다 인접 행렬 인접 리스트 공간복잡도 O(V^) O(V+E) 정점 u,v간 연결 관계 확인하는 시간 복잡도 O(1) O(min(deg(u),deg(v)) 정점 v에 연결되어 있는 모든 정점 확인하는 시간 복잡도 O(V) O(deg(V)) 효율적인 상황 -두 점의 연결 여부를 자주 확인하는 경우 -간선이 정점^에 가까울 경우 - 특정 정점에 연결된 모든 정점을 자주 확인하는 경우 - 간선이 정점^보다 훨씬 작을 경우 BFS 로 모든 노드 방문하는 방법 1. 시작하는 정점을 큐에 넣..
DP 문제 풀기 BOJ 1003. 피보나치 함수 1.테이블 정의하기 0과 1이 몇 번 출력되었는지 기록하기 위해 2차원 배열을 사용해서 정의한다 d[i][0] = fibonacci(i)를 실행했을 때 0이 출력된 횟수 d[i][1] = fibonacci(i)를 실행했을 때 1이 출력된 횟수 2. 점화식 구하기 피보나치를 응용해서 구하면 d[k][0] = d[k-1][0] + d[k-2][0] d[k][1] = d[k-1][1] + d[k-2][1] 3.초기값 설정 d[0][0] = 1 d[1][1] = 1 코드 import java.io.BufferedWriter import java.io.OutputStreamWriter fun main(args: Array) { var t = readLine()!!.toInt() v..
DP: Dynamic Programming 여러 개의 하위 문제를 풀고 그 결과를 쌓아올려 주어진 문제를 해결하는 알고리즘 예 ) 피보나치 -> 백트래킹 하기엔 n이 너무 클 경우 DP 푸는 과정 1. 테이블 정의하기 2. 점화식 찾기 3. 초기값 찾기 구현은 쉽지만 점화식을 끌어내는 과정이 쉽지 않음 -> 많은 문제 풀이 필요 BOJ 1463. 1로 만들기 (세 방향(연산 종류)으로 전개되는 bfs로도 풀 수 있음) 1.테이블 정의하기 d[i] = i 를 1로 만들기 위해 필요한 연산 사용 횟수의 최솟값 2. 점화식 찾기 (최소 횟수를 만들기 위한 규칙 찾기) 3으로 나누기 : d[k] = d[k/3] + 1(3으로 나눈 횟수 추가) 2로 나누기 : d[k] = d[k/2] + 1(2로 나눈 횟수 추가) 1 빼기 : d[k] = d[k-1] +..
kotlin 문자열 자르기 substring() 범위나 인덱스를 전달하여 문자열 자르기 가능하며 자른 문자열을 새로운 String에 담아 반환한다 String.substring(range) : 범위에 해당하는 부분을 잘라서 반환 String.substring(starIndex) : startIndex부터 끝까지 잘라서 반환 String.substring(startIndex, endIndex) : startIndex 부터 endIndex 전까지 잘라서 반환 split() delimiters(기준 문자열)에 따라 문자열을 자르고 List으로 반환한다 split(vararg delimiters: String, ignoreCase: Boolean = false, limit: Int = 0) 문자열 자르는 조건은 여러개 설정할 수 있다 c..