https://school.programmers.co.kr/learn/courses/30/lessons/12915?language=java 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr [문제]문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다. [제한 조건]strings는 길이 1 이상, 50 이하인 배열입니다...
https://school.programmers.co.kr/learn/courses/30/lessons/12944 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr [문제]정수를 담고 있는 배열 arr의 평균값을 return 하는 함수, solution을 완성해 보세요.arr은 길이 1 이상, 100 이하인 배열입니다. arr의 원소는 -10,000 이상 10,000 이하인 정수입니다. [입출력 예] [풀이]주어진 배열의 요소를 모두 더한 후에 해당 배열의 사이즈만큼 나눠줍니다.예시처럼 소수점으로 return 되는 경우를 고려하여 문제 반환 타입은 Double이..
https://school.programmers.co.kr/learn/courses/30/lessons/12932?language=java 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr [문제]자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를 들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. n은 10,000,000,000 이하인 자연수입니다. [입출력 예] [풀이]자연수 n이 주어지면 해당 숫자를 문자열로 변환합니다. n.toString()을 하면 결국 Char를 원소로 갖는 배열을 구성하게 됩니다. 그리고 해당 ..
Fatal Exception: java.lang.IllegalArgumentException RemoteViews for widget update exceeds maximum bitmap memory usage (used: 16216160, max: 15940800) 위와 같은 에러가 간혹 Widget에서 Bitmap을 사용할 때 발생합니다. 이전에 관련된 글을 작성했으나 여전히 재발하는 경우가 있어서 더 강화된 로직을 문서를 참고하여 구성했습니다. 거대한 비트맵 처리에 대해서 아래 공식 문서에서 처리 로직을 제안해주고 있습니다. https://developer.android.com/topic/performance/graphics/load-bitmap?hl=ko 큰 비트맵을 효율적으로 로드 | App q..
SharedPreferences 정의 SharedPreferences는 안드로이드 애플리케이션에서 간단한 키-값 쌍을 저장하고 검색하기 위한 인터페이스를 제공하는 클래스입니다. 이를 통해 애플리케이션 데이터를 저장하고 필요할 때 검색하여 사용할 수 있습니다. https://developer.android.com/training/data-storage/shared-preferences?hl=ko SharedPreferences로 단순 데이터 저장하기 | Android 개발자 | Android Developers DataStore는 로컬 데이터를 저장하는 최신 방법을 제공합니다. SharedPreferences 대신 DataStore를 사용해야 합니다. 자세한 내용은 DataStore 가이드를 참고하세요. ..
앱 테스트 진행 중에 다음과 같은 Exception이 발생했다. Fatal Exception: java.util.ConcurrentModificationException 여러 스레드에서 하나의 컬렉션에 접근할 때, 동시성 문제가 발생하는 것으로 확인된다. 문제가 발생한 코드로 이동해 보니... object DataManager { private var dataInfos = ArrayList() ..... object Manager 내부의 dataInfos라는 리스트가 있고, 해당 DataManager가 외부에서 여러 스레드에 동시 호출되며 dataInfos에 접근하던 중 문제가 발생하는 것으로 확인했다. 싱글톤 하위 리스트를 여러 스레드 접근에 안전하도록 처리할 필요가 있었다. object DataMan..
System 상에서 현재 애플리케이션을 완전히 종료시키는 로직 fun killApp(activity: Activity) { ActivityCompat.finishAffinity(activity) exitProcess(0) } 1. ActivityCompat.finishAffinity(activity) : 주어진 Activity와 해당 Activity 위에 쌓인 모든 Activity를 종료 2. exitProcess(0) : 현재 프로세스를 종료. 0은 정상 종료를 의미하는 코드 값
아래와 같이 api 호출 인터페이스를 구성하여 서버와의 통신을 시도했는데, EOFException이 발생했다. interface TestApi { @PUT("/api/test") fun update( @HeaderMap headers: HashMap, @Body request: BodyRequest ): Call } java.io.EOFException: End of input at line 1 column 1 path 통신 후, Response를 반환하는데 Empty Response를 반환하고 있었다. 하지만 내가 작업하면서 NormalResponse Type으로 반환되도록 구성하면서 발생하는 것이 원인이었다. 이 경우 2가지 해결 방법이 존재했다. 1. NormalResponse가 아니라 Unit으로..
제일 상위에 있는 차원의 배열을 해제해 준다. List 형태로 반환되며, 모든 중첩 배열을 해제해 주기 위해 n 차원만큼 flatten() 처리해주어야 한다. fun main() { val arr = arrayOf(arrayOf(1,2,3), arrayOf(7,8,9), arrayOf(arrayOf(100, 101, 102), arrayOf(201, 202, 203))) println(arr.contentDeepToString()) val arr2 = arr.flatten() println(arr2.toString()) }
사용자의 디바이스를 식별하거나 정보 파악을 위해서 id 또는 기기명, OS 버전 등의 확인이 필요한 경우가 있다. 이러한 정보를 Build Class에서 가져올 수 있다. GPT를 통해 확인한 Build Class에 담긴 정보는 아래와 같다. 1. Build.VERSION: Android 운영 체제의 버전 정보를 제공합니다. 예를 들어, Build.VERSION.SDK_INT를 통해 API 레벨(안드로이드 버전 코드)을 얻을 수 있습니다. 2. Build.VERSION_CODES: Android API 레벨을 상수로 정의한 클래스입니다. 코드에서 각 버전에 대한 조건을 확인할 때 사용됩니다. 3. Build.MODEL: 기기의 모델 이름을 제공합니다. 4. Build.MANUFACTURER: 제조사 정보..