같은 로직을 공유하는 화면에서는 종종 동일한 viewmodel 인스턴스를 공유해야 하는 일이 생긴다.compose를 사용하지 않던 기존 viewmodel에서는 ActivityViewModel을 사용하여 Fragment간 Viewmodel을 공유했으나 compose로 바뀌면서 화면단위가 Screen으로 변경되어 방법이 달라졌다. 결론적으로 NavBackStackEntry를 사용한다.NavBackStackEntry는 네비게이션 백스택의 각 항목을 나타내며, 각 항목에 ViewModelStore가 포함되어 있다. 따라서 특정 화면의 viewModel을 가져오고 싶다면 NavBackStackEntry를 사용하여 해당 화면에 viewModel 인스턴스에 접근하면 된다. 방법은 다음과 같다. 먼저 NavHost에서..
문제 시작 단어와 완성단어가 주어지고 시작단어를 최소한으로 변환시켜 완성단어까지 바꾸는 문제이다.단 단어의 변환시 한 글자만 다른 단어로 변환할 수 있다.풀이먼저 단어를 변환시키는 방법으로 DFS를 사용하였다.또한 단어의 한글자만 다른 것을 검사하는 check 함수를 구현하였다. 먼저 Check함수이다. fun check(a: String, b: String): Boolean { var cnt = 0 for (i in 0 until a.length) { if (a[i] != b[i]) cnt++ } if (cnt == 1) return true else return false}두 단어를 불러와서 검사한 뒤 한글자만 다를경우 True를 반환한다. fun DFS(sta..
Compose로 개발 중 Splash Screen을 사용할 일이 생겼다. 적용을 하기위해 두가지 필요성이 있었는데 다음과 같다.1. 최신 안드로이드 기기에서 사용2. Splash Screen은 데이터 로딩 후 종료되어야함 먼저 스플래쉬 스크린을 사용하기 위해 build.gradle에 추가한다.implementation 'androidx.core:core-splashscreen:1.0.1' 이제 splash screen의 기본적인 설정을 적용해줄 테마를 만든다.해당 테마로 스플래쉬 스크린의 배경, 아이콘등을 설정할 수 있다. 이제 적용을 위해 manifest를 수정하였다. applicaton단과 activity단의 them..
문제 격자에 넴모가 배치되어있고 좌표를 설정하여 레이저를 배치했을 때 몇마리의 넴모가 사라지는 지 구하는 문제이다.풀이먼저 넴모의 배치를 보면 중력을 받기 때문에 한 위치를 잡았을 때 그 위치보다 아래층에 넴모가 무조건 배치되어있다. 레이저의 영향을 받는 넴모는 본문에서는 어렵게 설명하였는데 결국 레이저의 위치를 기준으로 오른쪽과 위쪽에 넴모들이 영향을 받는다. 따라서 문제를 해결하려면 레이저의 위치를 기준으로 해당 위치 + 오른쪽 + 위쪽의 넴모의 개수를 카운트하면된다. val (N, Q) = readLine().split(" ").map { it.toInt() }val states = readLine().split(" ").map { it.toInt() }val maxNum = states.maxO..
프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제연결된 네트워크를 한 묶음으로 했을 때 몇개의 네트워크가 있는지 출력하는 문제이다.풀이입력은 2차원 배열로 주어지지만 한 네트워크가 다른 네트워크를 방문하면 다른네트워크가 방문한 것과 동일하게 처리하기때문에 1차원으로 생각하면 된다.즉 한번 방문한 컴퓨터는 고려하지 않아도 된다. 먼저 방문여부를 저장해줄 visited를 1차원배열로 선언한다.val visited = MutableList(n) {0}0으로 초기화했으며 0은 미방문, 1은 방문을 의미한다. 이후 BFS에서 자기자신과 연결되어있는 컴퓨터를 저장할..
문제주어진 문자열을 회전하며 괄호가 적절한지 검사하는 문제이다.풀이해당 문제는 언뜻보면 최단거리 문제같지만 DP로 해결할 수 있다.먼저 N각형을 삼각형을 분할하는 방법이다. 이 때 분할된 삼각형 사이의 거리가 최솟값이 되어야 한다.가장 쉬운 방법은 한 꼭지점을 잡아 그 지점부터 자신과 인접하지 않은 꼭짓점으로 이동하며 선을 그으면 최솟값의 거리를 가지는 삼각형들로 분할할 수 있다. 8각형의 경우 다음과 같이 분할할 수 있다.이런식으로 분할하며 경우의 수를 모두 적어보면 다음과 같은 경우들을 얻는다N3 - 04 - 15 - 26 - 27 - 38 - 39 - 410 - 411 - 412 - 413 - 514 - 5...이 때 n각형을 계속그리면서 발견한 규칙이 있었는데 3 * 2^i 의 n각형은 i-1..