목록전체 글 (125)
기록
fun main() { val arr = intArrayOf(2,5,3,1,6,7,0,4,8,9) for(i in 0 until arr.size - 1){ for(j in 1 until arr.size -i) { if(arr[j-1] > arr[j]) { val temp = arr[j-1] arr[j-1] = arr[j] arr[j] = temp } } } println(arr.contentToString()) }
fun main() { val arr = intArrayOf(2,5,3,1,6,7,0,4,8,9) for(i in 0 until arr.size) { var minIndex = i for(j in i+1 until arr.size) { if(arr[minIndex] > arr[j]) { minIndex = j } } val tmp = arr[i] arr[i] = arr[minIndex] arr[minIndex] = tmp } println(arr.contentToString()) } 가장 작은 데이터를 선택해 맨 앞의 데이터와 바꾸고, 그 다음 작은 데이터를 선택해 앞에서 두번째 데이터와 바꾸는 과정을 반복 현재 데이터의 상태와 상관 없이 무조건 모든 원소를 비교하고 위치를 바꾼다.
맨 왼쪽의 원소는 이미 정렬되어 있다고 가정하고, 두번째 원소부터 시작해서 왼쪽으로 순차적으로 현재 원소보다 큰 원소가 있다면 교체를 해주고, 또 다음 반복에서 그 왼쪽의 원소와 비교하여 또 큰 원소가 있다면 교체를 해주고, 이 작업을 반복하다가 마침내 현재 원소의 왼쪽 원소가 현재 원소보다 작은 경우를 만날 시에 브레이크로 중단하는 정렬 방식입니다. fun main() { val arr = intArrayOf(2,5,3,1,6,7,0,4,8,9) for(i in 1 until arr.size) { for(j in i downTo 1) { if(arr[j] < arr[j-1]) { val temp = arr[j] arr[j] = arr[j-1] arr[j-1] = temp } else break } } ..
기준데이터(피벗)를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법 일반적인 상황에서 제일 많이 사용되는 정렬 알고리즘 중 하나. 평균적으로 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..

어느 날처럼 코딩을 하고, 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,..

개발 과정 중 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 속성으..