백준 알고리즘 - 코틀린 풀이 https://www.acmicpc.net/problem/1037 1037번: 약수 첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되 www.acmicpc.net 문제 정답 fun main() { val n = readln().toInt() val input = readln().split(" ").map{it.toInt()} println(input.max() * input.min()) } 풀이 1037번 문제는 입력으로 주어진 가장 작은 약수와 가장 큰 약수의 곱으로 출력을 구하는 문제입니다. 약수들의 곱은 곱한 수보..
안녕하세요. 이번 포스팅에서는 코틀린의 typealias에 대해 알아보겠습니다. 코틀린의 typealias 키워드를 직역해보면 입니다. 말 그대로 타입(유형)에 별명을 지어주는 것인데요. 공식문서를 참고하거나 Kotlin Weekly를 참고해보면, typealias는 타입의 이름이 너무 길거나 중복되는 경우 좀 더 읽기 쉬운 이름으로 변경하기 위해 사용한다고 합니다. 예를 들어, 아래와 같이 변수를 생성한다고 한다고 할 때..벌써부터 머리가 어지럽습니다. var type: LiveData 만약 변수가 아니라 함수나 데이터 클래스에 중복되어서 들어간다고하면 정신이 혼미해지죠 data class Type(val name: LiveData, val value: LiveData) 그 때, 우리는 제너릭 타입의 ..
안녕하세요. 이번 포스팅에선 뷰의 클릭 이벤트가 여러번 중복 발생해서 생기는 에러들을 해결하기 위한 방법을 소개드리려고 합니다. 방식은 뷰의 클릭 리스너를 상속받는 클래스를 생성하고, 클릭 이벤트가 발생했을 때의 시간과 현재 시간을 비교하여 일정시간이 지나기 전까지 클릭을 막는 형태입니다. 전체 예제 코드를 보여드린 후 설명드리겠습니다 👀 시연 저는 버튼 하나와 텍스트뷰 하나를 생성해 버튼을 클릭하면 텍스트의 숫자가 하나씩 증가하는 예제를 만들었습니다. 아래 코드와 같이 중복 클릭 방지시간은 1초로 설정하였고, 중복클릭이 발생했을 경우엔 아무런 처리를 하지 않았습니다. 코드 import android.os.SystemClock import android.view.View import android.wid..
안녕하세요. 이번 포스팅에서는 날짜 객체인 LocalDataTime과 TimeStamp 객체인 Long을 서로 파싱하는 방법에 대해 알아보겠습니다. 개요 보통 안드로이드에서 System.currentTimeMillis(), Date 객체의 매개변수, Calendar 객체의 timeInMillis() 등 자주 사용하는 데이터 타입들은 Long 타입으로 제공됩니다. 하지만 Long은 타임스탬프이기 때문에 실제 날짜나 시간 데이터와는 형태가 다릅니다. 따라서 우리가 사용하기 좋은 구조로 데이터를 파싱하는 과정이 필요한데, 이때 자주 사용되는 객체가 LocalDateTime입니다. LocalDateTime은 시간을 년,월,일,시,분,초 등으로 쪼개어 받아올 수 있고, 세계시간을 기준으로 해당하는 지역의 시간으로..
안녕하세요. 이번 글을 쓰게 된 이유는 예전에 같이 알아보았던 디바이스 GPS 센서를 활용한 데이터를 다루는 글의 추가적인 정보를 전달드리기 위해서입니다. 예전 글에선 Google Location Service를 사용하여 현재 디바이스의 위치정보와 그 위치정보를 주소로 변환하는 과정까지 진행해 보았었습니다. 이번엔 좀 더 디테일한 처리를 위해 실제 사용자가 위치정보를 불러올 수 있는 환경인가? 를 검사하여 정상적으로 불러올 수 있는 환경일 경우에만 불러오는 처리를 간단하게 해 보겠습니다. 이번글에 위치를 불러오는 코드는 생략되었으니 혹시나 현재 위·경도 정보나 주소정보를 불러오는 글이 궁금하시면 아래 링크를 달아놓겠습니다. https://tekken5953.tistory.com/17 [안드로이드] 내 G..
안녕하세요. 이번 포스팅에는 안드로이드 개발에서 자주 사용하는 토스트 메시지를 즉시 생성(갱신)하는 방식에 대해 알아보겠습니다. 개요 토스트메시지는 일반적으로 정해진 Duration(지속시간)이 지속될 때 까지 다른 토스트 메시지들의 접근을 Blocking합니다. 왜냐하면 같은 스레드를 동기방식으로 사용하기 때문이죠. 그래서 만약 사용자가 토스트 메시지를 짧은시간에 여러번 호출한다면 아래 GIF와 같이 본인만의 시간의 흐름을 가지기 시작하며, 이는 사용자로 하여금 반응이 느리고 렉이 걸리는 듯한 오해를 가지게하기 쉽습니다. ※ 메시지가 서로 다름을 쉽게 확인하기위해 1씩 증가하는 카운트를 붙였습니다. 그럼 누르는 즉시 토스트 메시지로 띄워 주려면 어떻게 해야할까요? 저는 버튼이 클릭 될 때마다 새로운 스..
안녕하세요. 이번 포스팅에선 문자열에 폰트를 적용하는 방법에 대해 알아보겠습니다. 1. XML 레이아웃 파일에서 적용하기 2. Java and Kotlin 파일에서 적용하기 XML 레이아웃 파일에서 적용하기 Setting 먼저 프로젝트 res 폴더에 font 패키지를 추가하고 폰트 ttf 혹은 otf파일을 넣어줍니다. res 폴더 우클릭 > New > Android Resource Directory > Resource type: font > 폰트파일 복사/붙여넣기 activity_main.xml android:fontFamily="@font/폰트명" Java and Kotlin 파일에서 적용하기 Setting 클래스파일에서 폰트를 변경하기 위해 Assets 폴더를 생성합니다. app 폴더 우클릭 > Ne..
안녕하세요. 이번 포스팅에서는 현재 컨텍스트에서 앱을 재시작하는 방법에 대해 알아보겠습니다. 보통 데이터베이스를 롤백시키거나 언어설정을 변경하는 등 어플리케이션의 환경을 변경할 때 앱을 재시작하는 경우가 많습니다. 이럴 때 유용한 코드를 소개드리겠습니다. 원리는 현재 프로세스를 종료시키면서 앱의 패키지 컴포넌트를 Intent의 makeRestartActivityTask 메서드의 파라미터로 호출해 다시 실행시키는 방식입니다. 작성코드👀 Kotlin private fun restartApplication(mContext: Context) { val packageManager: PackageManager = mContext.packageManager val intent = packageManager.getLa..