목록분류 전체보기 (122)
기록
기준데이터(피벗)를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법 일반적인 상황에서 제일 많이 사용되는 정렬 알고리즘 중 하나. 평균적으로 O(NlogN)의 시간복잡도를 가지며, 최악의 경우 O(N^2)의 시간복잡도를 가진다. fun main() { val array = intArrayOf(5,7,9,0,3,1,6,2,4,8) quickSort(array, 0, array.size - 1) // array.forEach { print("$it ") } print(array.contentToString()) } fun quickSort(arr: IntArray, start: Int, end: Int) { if(start >= end) return val pivot = start var..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/zijb6/btr6qMOHbFg/7eWhotBrjLxHo18zzvwgSK/img.png)
어느 날처럼 코딩을 하고, GitHub에 Push 하려는데 뜬금없이 에러가 났다. 뭐 이런.. 😳 status를 보니 이렇게 떴다. 아무 에러 사항이 없어 보인다. git fetch 및 git pull --rebase origin main 등 도움 될만한 명령어들을 쳐봤지만 별다른 수확이 없던 도중... 혹시나 해서 GitHub Status 페이지를 확인해보니 두둥 GitHub 서버에서 오류가 발생했다고 한다! 금방 다시 Push를 해보니 정상적으로 작동함을 확인할 수 있었다. 아무리 봐도 문제를 못찾겠을 땐 GitHub Status 페이지를 확인해 보자.
Hilt란? 힐트(Hilt)는 안드로이드에서 의존성 관리를(Dependency Injection, DI) 쉽게 해주는 라이브러리입니다. '의존'이란 한 클래스가 다른 클래스를 참고한다는 뜻인데, 개발을 하다보면 여러 클래스끼리 연결되는 경우가 흔하게 있습니다. 한 클래스가 준비되어야 다른 클래스도 쓸 수 있는 경우이지요. 2개 정도의 클래스면 손으로 클래스끼리 연결을 해 줄 수도 있지만, 클래스의 수가 많아지고 연결이 여러곳에서 생기면 일일이 객체를 만드는 것도 번거로운 일이 됩니다. 이러한 어려움을 해결하기 위해 Hilt 라이브러리를 사용하여 의존성을 관리할 수 있습니다. Hilt의 이점 Hilt를 사용하면 안드로이드 기본 컴포넌트를 자동으로 주입해줍니다. (e.g. Activity, Fragment,..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/DO0Na/btrRaE7mLuo/64H2bsp9ySKV4ywCPIi1yk/img.png)
개발 과정 중 navigation으로 fragment를 교환하는 작업을 할 때 다음과 같은 오류를 만난 적이 있을 지도 모릅니다. 잘못된 action을 참조하여 이러한 오류가 발생했다면 해당 액션을 올바르게 수정하여 어렵지 않게 에러를 해결할 수 있습니다. 이 포스트에서는 대부분의 모든 action이 정상적으로 수행되나, 때때로 해당 crash가 발생하며 코드상에서 명확한 원인을 찾기 어려운 경우에 대해 기술합니다. 문제 원인 이 문제는 다음과 같은 이유로 navigation action 호출 이벤트가 연속적으로 두 번 이상 트리거될 때 나타납니다. 1. 네트워크 응답 콜백, 센서 및 인터넷 연결 콜백과 같은 non-user에 의해 트리거된 콜백 2. 해당 이벤트를 호출하는 버튼 클릭, 뷰 이벤트와 같은..
https://school.programmers.co.kr/learn/courses/30/lessons/118666 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 요즘 유행하는 MBTI 관련 문제여서 재미있게 풀었다. 문제 접근 - 동점일 때 사전순 처리를 어떻게 할 것인가? class Solution { fun solution(survey: Array, choices: IntArray): String { var answer = "" val standardZeroJipyo = mapOf(0 to "RT", 1 to "CF", 2 to "JM", 3 to ..
앱을 쓰다 보면 editText를 눌러 키보드를 올린 상태로 입력한 뒤, 바깥 부분을 아무데나 누르면 키보드가 내려가는 걸 볼 수 있다. 이 처리를 구현하고 싶다면 먼저 아래 메서드를 생성한다. void hideKeyboard() { InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } 프래그먼트를 사용 중이라면 아래 코드를 사용한다. private void h..
현재 만들고 있는 노트 앱에서 데이터베이스의 note data를 fetch하는 동안 프로그레스 바를 돌렸다. 이번에 유저 기능을 추가하면서 로그인/회원가입 단계에서도 데이터를 가져올 때 프로그레스 바를 돌리고 싶었다. 이렇게 같은 레이아웃을 반복해서 사용할 때는 xml에서 include라는 태그를 사용하면 레이아웃을 재사용할 수 있다. 사용법 먼저 재사용할 프로그레스바를 새로운 레이아웃 파일로 빼내고, 여러곳에서 프로그레스바를 돌릴 조건을 전달받기 위해 isVisible이라는 변수를 새로 정의했다. 그리고 해당 레이아웃을 사용할 xml 파일에 다음과 같은 내용을 추가한다. ... ... 위와 같이 include 태그의 layout 속성에 재사용하려는 레이아웃 파일 이름을 기술한다. 그리고 bind 속성으..
LiveData Android Studio 3.1 이상부터는 LiveData와 ViewModel이 데이터바인딩과 함께 작동한다. (Databinding Supports for ViewModel and LiveData) binding.viewModel = viewModel binding.setLifecycleOwner = this 위와 같이 xml 레이아웃에 뷰모델과 LifecycleOwner을 바인딩야하면 xml에 바인딩한 LiveData를 제대로 관찰할 수 있다. 따라서 xml에 바인딩 수식으로 ViewModel과 LiveData에 대한 참조를 표현할수 있다. 데이터바인딩을 사용하면 더 이상 UI단에서 Observer를 수동으로 설정할 필요가 없다. 따라서 LiveData Observer 코드를 만드는..
val menuHost: MenuHost = requireActivity() menuHost.addMenuProvider( object : MenuProvider { override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) { menuInflater.inflate(R.menu.selected_note_menu, menu) } override fun onMenuItemSelected(menuItem: MenuItem): Boolean { when (menuItem.itemId) { R.id.delete_menu -> { viewModel.deleteNote(note) navController.navigateUp() } else -> return ..
override fun onMenuItemSelected(menuItem: MenuItem): Boolean { when (menuItem.itemId) { R.id.delete_menu -> { viewModel.deleteNote(note) this@SelectedNoteFragment.findNavController().popBackStack() } else -> return false } return true } java.lang.IllegalStateException: Fragment SelectedNoteFragment{e2fb287} (9027fbbf-8601-4b62-ab29-fdbea88a370d) not associated with a fragment manager. findNavCon..