본문 바로가기

전체 글139

[Algorithm/Kotlin] 백준 2839번 설탕 배달 문제 설명설탕 배달 문제는 다음과 같습니다.상근이는 설탕 공장에서 3kg 봉지와 5kg 봉지를 사용해 정확히 Nkg의 설탕을 배달하려고 합니다. 이때 봉지의 개수가 최소가 되도록 설탕을 나눌 방법을 찾는 문제입니다.만약 정확히 나눌 수 없다면 -1을 반환해야 합니다.문제 해결 아이디어이 문제의 핵심은 5kg 봉지를 최대한 먼저 사용하고, 나머지를 3kg 봉지로 채우는 방법입니다. 이유는 5kg 봉지를 최대한 사용했을 때 봉지 개수가 더 줄어들 가능성이 높기 때문입니다.로직 설계기저 조건:   N인 경우 설탕을 정확히 나눌 수 없으므로 -1을 반환합니다.5kg 봉지를 최대한 사용:   N을 5로 나눈 몫만큼 5kg 봉지를 사용합니다.   남은 설탕 무게를 계산합니다.남은 설탕 처리:   남은 설탕이 3으로.. 2025. 1. 6.
[Android/Kotlin] sortWith vs sortedWith: 차이와 사용법 코틀린에서는 리스트를 정렬할 때 sortWith와 sortedWith를 자주 사용합니다. 둘은 비슷하게 보이지만, 실제 사용 목적과 동작 방식에서 중요한 차이가 있습니다. 이 글에서는 두 함수의 차이점과 사용 방법에 대해서 정리 해 두겠습니다.1. sortWith원본 리스트를 변경하는 함수입니다.MutableList에서만 사용할 수 있습니다.반환값이 없으며, 리스트 자체를 정렬합니다.사용 예제val mutableList = mutableListOf(3, 1, 4, 1, 5, 9)mutableList.sortWith(compareBy { it }) // 오름차순 정렬println(mutableList) // 출력: [1, 1, 3, 4, 5, 9] compareBy는 정렬 기준을 지정하는 람다를 받아서 처.. 2025. 1. 2.
[Algorithm/Kotlin] 백준 7568번 덩치: StringBuilder를 활용한 풀이법 덩치 등수 매기기 문제는 주어진 사람들의 키와 몸무게를 비교하여 각자의 상대적인 순위를 구하는 알고리즘 문제입니다. 이번 글에서는 문제를 두 가지 방식으로 해결하며, 효율성을 개선하기 위해 StringBuilder를 활용한 방식을 소개합니다. 문제 설명덩치 비교 기준사람의 덩치는 키와 몸무게 두 가지 값으로 표현됩니다. 예를 들어 (x, y)는 한 사람의 몸무게 x와 키 y를 나타냅니다. 두 사람 A와 B의 덩치 (x, y)와 (p, q)를 비교할 때:A의 덩치가 더 크다면: x > p 그리고 y > q를 만족해야 합니다.두 값 중 하나라도 크거나 같지 않으면 A와 B의 덩치는 비교할 수 없습니다.등수 계산주어진 N명의 사람들에 대해:자신보다 덩치가 더 큰 사람의 수를 구합니다.등수는 이 수에 1을 더한.. 2025. 1. 2.
[Android/Kotlin] 비상 사운드 효과 구현: 강제 볼륨 조절 비상 상황에서 긴급 신고를 했을 때, 기기의 볼륨이 꺼져 있거나 낮게 설정되어 있는 경우에도 사운드 알림이 들릴 수 있도록 하는 기능이 필요했습니다. 처음에는 AudioManager.STREAM_ALARM 타입으로 설정되어 있어 강제로 볼륨을 올리는 기능이 제대로 작동하지 않았습니다. 하지만 이를 AudioManager.STREAM_MUSIC 타입으로 변경한 후 정상적으로 동작하게 되었고, 이 과정을 통해 얻은 구현 방법을 공유하고자 합니다.구현 코드아래 코드는 기기의 볼륨을 강제로 최대치로 설정하고 비상 사이렌 소리를 재생하는 방법을 보여줍니다.private fun emergencyEffect(isPlay: Boolean) { if (isPlay) { // AudioManager 시스.. 2024. 12. 13.
[Algorithm/Kotlin] 백준 2562번 최댓값: withIndex 문법을 활용한 풀이법 이번 글에서는, 리스트의 최댓값을 구하고, 그 최댓값이 위치한 인덱스를 함께 찾는 두 가지 방식에 대해 정리 해 보겠습니다.특히, 최댓값 문제를 풀면서 알게되어 두 번째 방식에서 사용한 withIndex 문법에 대해 중점적으로 살펴보겠습니다.문제 정의9개의 정수를 입력받아 리스트에 저장한 뒤, 다음 두 가지를 출력하는 프로그램을 작성합니다:리스트의 최댓값최댓값이 위치한 인덱스(1부터 시작)풀이 방법 1: 간단한 라이브러리 함수 활용먼저, 코틀린의 내장 함수를 활용한 간단한 풀이 방법입니다.fun main(args: Array) { val br = BufferedReader(InputStreamReader(System.`in`)) val bw = BufferedWriter(OutputStream.. 2024. 12. 10.
[Android/Kotlin] 뒤로가기 기능을 구현하는 방법: OnBackPressedDispatcher 활용법 안드로이드 개발을 하다 보면, 뒤로가기 버튼을 눌렀을 때 특정 동작을 처리해야 하는 경우가 자주 발생합니다.기존에는 onBackPressed 메서드를 오버라이드하여 이를 구현했지만, 안드로이드 12(API 31)부터 이 메서드가 Deprecated되었습니다. 대신 OnBackPressedDispatcher를 이용한 새로운 방식이 도입되었습니다.이번 글에서는 안드로이드에서 뒤로가기 기능을 구현하는 새로운 방법과 그 이유를 정리 해 두겠습니다. 왜 onBackPressed가 Deprecated되었을까?onBackPressed는 뒤로가기 버튼의 동작만을 단순히 처리하도록 설계된 메서드였습니다. 하지만 Fragment와 Lifecycle 기반 컴포넌트가 점차 중요해지면서 뒤로가기 이벤트를 더 유연하게 처리할 필.. 2024. 12. 3.
[Android/Kotlin] Kakao Map V2: 특정 좌표를 모두 화면에 표시하기 Kakao Map V2에서는 지도에서 특정 좌표들이 모두 보이도록 카메라를 자동으로 이동 및 확대/축소할 수 있습니다.이를 위해 kakaoMap.moveCamera(CameraUpdateFactory.fitMapPoints()) 메서드를 활용할 수 있습니다.이번 글에서는 출발지와 도착지가 지도 화면에 동시에 보이도록 카메라를 설정하는 방법을 공유 하고자 합니다. 문제 상황처음 지도에 출발지와 도착지의 마커를 표시했을 때, 두 위치가 서로 멀리 떨어져 있으면 한 화면에 두 마커가 모두 나타나지 않는 문제가 있었습니다.이런 경우, 사용자는 출발지나 도착지 중 하나만 확인할 수 있어 불편함을 느낄 수 있습니다.이를 해결하기 위해 Kakao Map V2의 CameraUpdateFactory.fitMapPoint.. 2024. 12. 2.
[Android/Kotlin] API Key 숨기기: buildConfigField 활용법 안드로이드 앱 개발에서는 API Key와 같은 민감한 정보를 소스 코드에 하드코딩하면 보안상 위험합니다.이러한 문제를 방지하기 위해 **buildConfigField**를 사용하여 API Key를 안전하게 관리해야 하지만, 매번 구현할 때마다 세부적인 과정을 잊어버리곤 했습니다. 그래서 이번 기회에 정리해 두고 필요할 때 빠르게 참고할 수 있도록 내용을 남깁니다. 1. 프로젝트 설정: local.properties에 API Key 저장하기프로젝트 루트 디렉토리의 local.properties 파일에 API Key를 추가합니다. 이 파일은 기본적으로 .gitignore에 포함되어 있어 Git 저장소에 업로드되지 않습니다.예시: local.propertiesKAKAO_NATIVE_APP_KEY=your_ka.. 2024. 12. 2.
[Android/Kotlin] Kotlin의 ?. 연산자와 ?: 연산자: 실제 예시로 이해하기 개발 중 맵의 출발지/도착지를 재설정하는 기능을 구현하면서 Kotlin의 ?. 연산자와 ?: 연산자를 효율적으로 사용할 수 있는 상황이 발생했습니다.이 글에서는 실제 예시와 함께 두 연산자의 쓰임새를 정리하고, 어떻게 이를 활용해 코드를 간결하고 직관적으로 만들었는지 정리 해 두고자 합니다. 문제 상황: 맵의 마커 업데이트맵에서 사용자가 새로운 출발지나 도착지를 선택하면, 맵에 표시된 마커(레이블)를 업데이트해야 합니다. 이때 고려해야 할 점은 다음과 같습니다:마커가 이미 존재하는 경우기존 마커의 위치를 업데이트해야 합니다.마커가 존재하지 않는 경우새로 마커를 추가해야 합니다.해결 방법: ?. 연산자와 ?: 연산자의 활용이 문제를 해결하기 위해 아래와 같은 Kotlin 문법을 활용했습니다.destinat.. 2024. 11. 29.
[Android/Kotlin] 안드로이드 앱에서 카카오 SDK를 사용해 OAuth 로그인을 구현하는 방법 이번 글에서는 카카오 SDK를 사용해 안드로이드 앱에 OAuth 로그인을 구현하는 과정을 기록 해 두고자 합니다. 1. 카카오 SDK 설치먼저, 카카오 SDK를 프로젝트에 추가해야 합니다.Gradle 설정1. 프로젝트 수준 build.gradle 파일에 Maven 저장소 추가.allprojects { repositories { google() mavenCentral() maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' } }} 2.앱 수준 build.gradle 파일에 카카오 SDK 종속성 추가.dependencies { implementation "com.kakao.sdk:v2.. 2024. 11. 9.
[Android/Kotlin] EncryptedSharedPreferences 사용하기: 보안 강화된 데이터 저장 방법 안드로이드 앱 개발 시, 간단한 데이터 저장을 위해 흔히 SharedPreferences를 사용합니다.하지만 이 방식은 기본적으로 암호화되지 않은 데이터를 저장하므로 보안에 취약할 수 있습니다.특히 사용자의 인증 토큰, 계정 정보와 같은 민감한 데이터를 다룰 때는 암호화가 필수적입니다.여기서 EncryptedSharedPreferences가 유용하게 사용될 수 있습니다.이번 글에서는 EncryptedSharedPreferences가 무엇인지, 왜 더 안전한지, 어떻게 사용하는지에 대해 다뤄보겠습니다. 1. EncryptedSharedPreferences란?EncryptedSharedPreferences는 안드로이드에서 민감한 데이터를 안전하게 저장하기 위해 제공하는 암호화된 데이터 저장 방식입니다. 일반.. 2024. 11. 8.
[Android/Kotlin] CameraX에서 발생한 'Use case binding failed' 오류를 조건부 바인딩으로 해결하기 CameraX를 사용해 사진 또는 비디오를 촬영하고, 그 결과를 서버에 업로드한 후 성공 여부를 이전 화면으로 전달하는 과정에서 카메라 화면으로 넘어가지 못하고 Use case binding failed 오류가 발생 했습니다.이 오류는 설정된 mediaFormat에 따라 하나의 촬영 모드만 활성화해야 하는 상황에서, 사진(ImageCapture)과 비디오(VideoCapture) UseCase를 동시에 바인딩하고 있었기 때문에 발생했습니다.  이번 글에서는 mediaFormat 값에 따라 필요한 UseCase만 바인딩하도록 수정하여 문제를 해결한 과정을 공유합니다.문제 상황: Use case binding failed 오류CameraX는 기기 하드웨어가 허용하는 범위 내에서만 여러 UseCase를 동시 .. 2024. 11. 1.
반응형