티스토리 뷰

코드카타

 

나머지가 1이 되는 수 찾기

 

문제

 

 

정답

class Solution {
    fun solution(n: Int): Int {
        for(i in 2..n){
            if(n % i == 1) return i;
        }
        return 1;
    }
}

나머지가 1이 되도록 하는 가장 작은 자연수를 구해야하므로

2 ~ n의 범위를 for문을 돌려 부터 시작 조건에 맞는 값을 반환하도록 한다.

 

전날에는 if문에도 중괄호를 씌웠는데 다른 언어와 마찬가지로

if문의 중괄호에 들어가는 값이 1줄이라면 저런식으로 줄여서 쓸 수 있다.

 

 

컴파일러 조건 만족

 

return 1 은 이론적으로 도달할 수 없는 코드이지만

모든 경로의 반환값을 요구하는 코틀린 컴파일러의 조건을 만족시키기 위해

추가해줘야 하며 1이 아닌 어떤 값을 반환하든 실행결과에 영향을 주지 않는다.

 

 만약 제한사항이 없어진다면 n의 값을 1로 들어올수도 있는데 이 때

for문의 조건이 거짓이 되어 return 1이 실행되게 된다.

 

 

 

x만큼 간격이 있는 n개의 숫자

 

문제

 

 

정답

class Solution {
    fun solution(x: Int, n: Int): LongArray {
        val a = LongArray(n) 
        for(i in 1..n){
            a[i - 1] = x.toLong() * i
        }
        return a
    }
}

함수는 LongArray를 반환하므로 a라는 n의 크기를 가지는 LongArray를 선언해준다.

a의 0 ~ n 번지의 값(모든 요소)을 i * x로 초기화 해주고 a를 반환한다. 

 

 

LongArray

val n = 3
val a = LongArray(n) // [0, 0, 0]

LongArray는 값의 변경이 불가하여 불변타입변수(val)로 선언해줘야한다.

LongArray는 n의 크기만큼 배열을 생성하는데 배열 요소의 초기값은 0이다.

LongArray의 n번지 값을 변경할 땐 n번지 값의 자료형을 Long타입으로 해줘야 한다. 

 

 

 

자연수 뒤집어 배열로 만들기

 

문제

 

 

정답

class Solution {
    fun solution(n: Long): IntArray {
        return n.toString().reversed().map{ it - '0' }.toIntArray()
    }
}

n을 문자열로 변환한다음 뒤집고 n의 요소를 정수형으로 변환한 다음

Int형 배열로 변환한 값을 반환한다.

 

 

변환과정

val n = 12345

val s = n.toString() // '12345'
val r = s.reversed() // '54321'
val i = r.map{ it - '0'} // 54321 
val a = i.toIntArray() // [5,4,3,2,1]

reversed() 함수로 문자열을 뒤집을 수 있다. 

 

 

 

문자열을 정수로 바꾸기

 

문제

 

 

정답

class Solution {
    fun solution(s: String): Int {
        return s.toInt()
    }
}

 toInt()로 문자열을 int형으로 변환하면된다.

 

 

 

정수 제곱근 판별

 

문제

 

 

정답

class Solution {
    fun solution(n: Long): Long {
        val x = Math.sqrt(n.toDouble()).toLong()
        return if (x * x == n) (x + 1) * (x + 1) else -1
    }
}

Math.sqrt(n: Double)로 n의 제곱수를 구할 수 있다.

 

 

 

정수 내림차순으로 배치하기

 

문제

 

 

정답

class Solution {
    fun solution(n: Long): Long {
        // 정수를 문자열로 변환하고, 문자 배열로 만든 후, 내림차순 정렬
        val sortedStr = n.toString().toCharArray().sortedDescending()
        // 정렬된 문자 배열을 다시 문자열로 합치고, 정수로 변환
        val result = sortedStr.joinToString("").toLong()
        return result
    }
}

sortedDescending()은 배열의 요소들을 내림차순으로 정렬하는 함수이다.

 


 

새롭게 다루는 것들

 

제트팩

 

 

안드로이드는 모든 버전과 기기에서 일관되게 동작하는 젯팩(Jetpack) 라이브러리를 제공한다.

안드로이드 버전 및 기기 별로 코드가 달라지는 문제들을 해결하기 위해 젯팩이 개발되었다.

 

 

하위 버전 호환성

 

이전 버전과의 호환성 기능이 통합되어

비정상 종료와 메모리 누수를 줄일 수 있게 해준다.

 

반복되는 코드 제거

 

젯팩은 백그라운드 작업, 수명 주기 관리 등

반복적이고 지루한 코드를 제거해준다.

 

낮은 복잡도

 

모든 버전 및 기기에서 일관된 동작으로 코드의 복잡도를 낮춰준다.

 

 

뷰 바인딩

 

 

안드로이드에서 뷰 객체에 접근하기 위해서는 findViewById()를 사용한다.

안드로이드는 findViewById를 떨쳐내고(deprecate) 뷰 바인딩을 지원한다.

 

 

코루틴

 

 

코틀린에서는 백그라운드 처리를 위해 사용되던 스레드를 경량화한 코루틴이 제공된다.

 

기존의 스레드는 코루틴을 위해 실행 가능한 공간을 제공하는 역할만 하며,

하나의 스레드에 여러 개의 코루틴이 존재할 수 있도록 설계되었다.

 

그래서 2개 이상의 코루틴이 있을 때 프로세스 흐름이 코루틴 1에서 코루틴 2로 변경된다 하더라도

기존 스레드의 변경에서 발생할 수 있었던 성능 저하는 발생하지 않는다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함