문제 링크 https://www.acmicpc.net/problem/2559 2559번: 수열 첫째 줄에는 두 개의 정수 N과 K가 한 개의 공백을 사이에 두고 순서대로 주어진다. 첫 번째 정수 N은 온도를 측정한 전체 날짜의 수이다. N은 2 이상 100,000 이하이다. 두 번째 정수 K는 합을 구하기 www.acmicpc.net 문제 풀이 fun main() = with(System.`in`.bufferedReader()) { val (n, k) = readLine().split(" ").map { it.toInt() } val temperature = readLine().split(" ").map { it.toInt() }.toIntArray() var sum = temperature.slice(..
kotlin
문제 링크 https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 문제 풀이 fun main() = with(System.`in`.bufferedReader()) { val n = readLine().toInt() val times = Array(n) { Array(2) { 0 } } repeat(n) { val line = readLine().split(" ") times[it][0] = line[0].toInt() times[it][1] = line[1].toInt() } times.sortWith(compareBy { it[1] }.thenBy { it[0] }..
정렬 1) 기본 정렬 1. Immutable 리스트 기본 정렬 val list = listOf(20, 10, 40, 30, 50) val sortedList = list.sorted() println("List : $list") println("SortedList : $sortedList") // 결과 // List : [20, 10, 40, 30, 50] // sortedList : [10, 20, 30, 40, 50] 불변 리스트이므로 원본 리스트는 변경되지 않습니다. 2. Mutable 리스트 기본 정렬 val mutableList = MutableList(20, 10, 40, 30, 50) mutableList.sort() println("MutableList : $mutableList") // ..
문제 링크 https://www.acmicpc.net/problem/2217 2217번: 로프 N(1 ≤ N ≤ 100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다. 하 www.acmicpc.net 문제 풀이 import kotlin.math.max fun main() = with(System.`in`.bufferedReader()) { val n = readLine().toInt() val weights = Array(n) { 0 } for (i in 0..< n) { weights[i] = readLine().toInt() } weights.sort() var maxW..
문제 링크 https://www.acmicpc.net/problem/11047 11047번: 동전 0 첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수) www.acmicpc.net 문제 풀이 fun main() = with(System.`in`.bufferedReader()) { var (n, k) = readLine().split(" ").map { it.toInt() } val coins = mutableListOf() var result = 0 repeat(n) { coins.add(readLi..
입출력 입력 fun main() = with(System.`in`.bufferedReader()) { // 정수 하나 읽기 val num = readLine().toInt() // 공백 기준으로 읽기 val nums = readLine().split(" ").map { it.toInt() } // 문자열을 char 배열로 받기 val char = readLine().toCharArray } 출력 fun main() = with(System.`out`.bufferedReader()) { // 기본 print("hello") // bufferedWriter val sout = BufferedWriter(OutputStreamWriter(System.out)) sout.appendLine() sout.flus..
코루틴 비동기 경량 스레드 - "Co: 함께" + "routine: 작업 처리단위" = "Coroutine: 어떤 작업을 함께 처리한다." - 예전에는 ANR 오류를 해결하기 위해 스레드-핸들러나 AsyncTask를 이용했음. 하지만 API 30에서 deprecated되었고 코루틴 이용을 권장하고 있음 - 일반적인 스레드는 자유로운 제어가 힘들고 구현도 복잡하지만, 코루틴은 가볍고 많은 기능을 제공함 CoroutineContext 코루틴 처리를 어떻게 할 것인지에 대한 요소들의 집합 - Dispatcher : 코루틴을 처리할 스레드를 셋팅하고 할당하는 역할 - Job : 생성된 코루틴을 컨트롤 (생명 주기, 부모 자식 관계 정리 및 관리) Coroutine Dispatcher - 코루틴을 스레드에 배분하..
DataStore - Android Jetpack 라이브러리 중 하나 - 프로토콜 버퍼를 사용하여 키-값 쌍 혹은 유형이 지정된 객체를 저장할 수 있는 데이터 저장소 솔루션 - 코루틴 및 Flow를 사용하여 비동기적이고 일관된 트랜잭션 방식으로 데이터를 저장하는 것이 특징 SharedPreferences vs DataStore DataStore 특징 - 비동기적으로 작동 (코루틴과 Flow를 통해 읽고 쓰기에 대한 비동기 API 제공) - UI 스레드를 호출해도 안전 (Dispathers.IO 밑에서 작동) - Runtime Exceptions로부터 안전 - SharedPreferences 데이터와의 병합 기능 - 일관성이 보장되는 트랜잭션 API를 제공 DataStore 종류 1) Preferences..