문제 이해 행렬의 덧셈 ( 행과 열이 같다 ) 접근 두개의 mapIndexed 함수를 활용하여 각각 더해준다음 반환시킨다 풀이 class Solution { fun solution(arr1: Array, arr2: Array): Array { var answer = arrayOf() answer = arr1.mapIndexed { indexArr, ints -> ints.mapIndexed { indexInts, i -> i + arr2[indexArr][indexInts] }.toIntArray() }.toTypedArray() return answer } }
문제 이해 Return phone_number 뒷자리 제외 " * " 접근 리스트 생성 for문 돌려서 마지막 숫자를 제외한 값에는 * 삽입 풀이 class Solution { fun solution(phone_number: String): String { var answer = arrayListOf() for (i in phone_number.indices) { if (i < phone_number.length - 4) { answer.add("*") } else { answer.add(phone_number[i].toString()) } } return answer.joinToString("") } } 다른 사람의 풀이 fun solution(phone_number: String): String { ..
문제 이해 x % ( x 자릿수의 합 ) == 0 -> 하샤드 Return true/false 접근 map으로 x를 배열화 시켜 요소값의 합을 구해 자리값의 합을 구한다 나눠서 0이 되는 값의 합을 구한다 -> 비교 풀이 class Solution { fun solution(x: Int): Boolean { var answer = true var sum = 0 x.toString().map { sum += (it.toInt() - '0'.toInt()) } return x % sum == 0 } } 다른 사람의 풀이 class Solution { fun solution(x: Int): Boolean { return x % x.toString().fold(0) { acc, c -> acc + c.toInt..
코틀린에서 비동기 처리로 여러개의 루틴을 동시에 처리할 수 있는 방법 메인의 동기처리와 별도로 움직이며 개발자가 제어 가능한 루틴 처리 import kotlinx.coroutines.* import 필수 코르틴은 제어범위 및 실행범위를 지정할 수 있다 -> 코루틴의 Scope Global Scope 프로그램 어디서나 제어, 동작이 가능한 기본범위 CoroutineScope 특정한 목적의 Dispatcher를 지정하여 제어 및 동작이 가능한 범위 모든 플랫폼에서 지원되는 것은 아님, 지원되는 플랫폼에 따라서 사용 Dispatchers.Default(기본적인 백그라운드 동작) Dispatchers.IO(I/O에 최적화 된 동작) Dispatchers.Main메인(UI) 스레드에서 동작 Scope에서 제어되도..
비트연산 정수형 변수를 사람이 사용하는 10진법으로 연산하는 대신 2진법인 비트 단위로 연산할 수 있는 기능 실무에서는 비트연산을 계산에는 거의 사용하지 않음 2진법을 이요한 연산 최적화가 필요하다면 컴파일러의 기능을 사용하는 경우가 대부 분 정수형의 값을 비트단위로 나누어 데이터를 좀더 작은 단위로 담아 경제성을 높이기 위한 용도로 사용함 32비트에서 5비트 따로 27비트 따로 다른 값을 넣어 사용하는 등 변수 하나에 여러개의 값을 담아 사용 주로 플래그 값(상태를 0과 1로 담음) 처리 하거나 네트워크 등에서 프로토콜의 데이터량을 줄이기 위해 사용 좌측으로 갈수록 상위 비트 우측으로 갈 수록 하위 비트 이다 최상위는 부호 비트이기때문에 데이터를 담지 않는 것이 좋다 bitwise shift opera..
기존의 var , val의 차이는 알고 있다 ( 할당된 객체를 바꿀 수 있는 지의 유무) 그러나 val에서 객내 내부의 속성을 변경 할 수 없는 것은 아니다 그러나 상수는 절대 변경 할 수 없다 상수 절대 변경할 수 없는 값 const val CONST_A = 1234 String과 같은 기본 자료형으로만 가능 클래스 객체들을 담는 것은 불가능 클래스의 속성(field)이나 함수의 지역변수로는 사용 불가능 반드시 companion object 안에서 사용하여 객체의 생성과 관계 없이 고정적인 값으로만 사용 됨 이름은 의례적으로 대문자와 언더바만 사용 const val CONST_A = 1234 예제 fun main() { val foodCourt = FoodCourt() foodCourt.searchPr..
문제 이해 1. 짝수라면 2로 나눔 2. 홀수라면 3을 곱하고 1 더함 3. 같은 작업을 1이될때까지 반복 접근 1이 될때까지 분기 나눠주기 count 500 되는 순간 return 풀이 class Solution { fun solution(num: Int): Int { var longNum = num.toLong() var count = 0 while (count 1) { count ++ longNum = if (longNum % 2 == 0L) longNum / 2 else longNum * 3 + 1 } return if (count == 500) -1 else count } } 다른 사람의 풀이 class Solution { fun solution(num: Int..
문제 이해 두수 n, m 최대 공약수 / 최소공배수 반환 : Array 접근 최대 공약수 함수 작성 유클리드 호제법 나눴을때 나머지가 0이 될때까지 재귀 함수 돌리기 최소 공배수 함수 작성 두수의 곱 / 최대공약수 return 풀이 class Solution { fun solution(n: Int, m: Int): IntArray { return intArrayOf(gcm(n, m), lcm(n, m)) } fun gcm(a: Int, b: Int): Int { var maximum = max(a, b) var minimum = min(a, b) if (minimum == 0) { return maximum } else { return gcm(minimum, maximum % minimum) } } fu..
그 외 컬렉션 함수 설명 associateBy 아이템에서 key를 추출하여 map으로 변환하는 함수 collection.associateBy { it.name } key로 사용할 name을 걸어준다 -> 자동으로 map 으로 변환하여 반환 groupBy key가 같은 아이템끼리 배열로 묶어 map 으로 만드는 함수 collection.groupBy { it.birthYear } 특정한 값이 같은 객체를 배열로 묶어 반환 partition 조건을 걸어 true, false 나눠준다 collection.partition { it.birthYear > 2002 } 두 컬렉션은 Pair라는 객체로 반환 -> frist, second 로 참조 val (over2002, under2002) = collection...
기존의 방식 : for(item in collection) 으로 반복해서 아이템을 꺼내어 사용 But, 코틀린은 함수형 언어의 특징을 가지고 있기 때문에 좀더 편리하게 사용 가능 컬렉션 함수 list, set, map 과 같은 컬렉션 또는 배열에 일반 함수, 또는 람다 함수 형태를 사용하여 for 문 없이도 아이템을 순회하며 참조하거나 조건을 걸고, 구조의 변경까지 가능한 여러가지 함수를 지칭 ForEach it이라는 변수로 순서대로 참조 가능 filter it에 조건을 걸어주면 해당하는 값만 컬렉션으로 반환됨 map it에 수식을 적용 : 값을 일괄적으로 변경할 수 있음 any, all, none -> 조건을 걸어 사용 collection.any { it == 0 } : 하나라도 조건에 맞으면 true..
문제 이해 엄지손가락만으로 터치 왼손 * 시작 오른손 # 시작 상하좌우 이동 2580 의경우에는 현재 왼손, 오른손 위치중 가까운 손으로 터치 접근 숫자의 좌표화(거리 비교) , but 거리는 안구해도됨 Pair의 함수 추가 if 분기 나누고 거리 비교 하기 풀이 import kotlin.math.abs fun main() { val data = intArrayOf(1, 3, 4, 5, 8, 2, 1, 4, 5, 9, 5) val data1 = "right" println(Solution().solution(data, data1)) } class Solution { fun solution(numbers: IntArray, hand: String): String { var answer = "" val ma..
Set List와 달리 순서가 정렬되지 않으며 중복이 허용되지 않는 컬렉션 인덱스로 위치를 지정하여 객체를 참조할 수 없음 sampleSet.contains("A")로 존재하는지 확인하는지로만 사용 Set, MutableSet 존재 객체의 추가, 삭제 여부에따라 사용 add(Data) remove(데이터) 예제 fun main() { val a = mutableSetOf("귤", "바나나", "키위") for (item in a) { println("${item}") } a.add("자몽") println(a) a.remove("바나나") println(a) println(a.contains("귤")) } Map Map 은 객체를 넣을 때 그 객체를 찾아낼 수 있는 Key를 쌍으로 넣어줄 수 있는 컬렉션..