티스토리 뷰
코드카타
나머지가 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로 변경된다 하더라도
기존 스레드의 변경에서 발생할 수 있었던 성능 저하는 발생하지 않는다.
'내일배움캠프 > Android 사전캠프' 카테고리의 다른 글
사전캠프 TIL 6일차 (안드로이드 개발환경 세팅) (0) | 2024.04.30 |
---|---|
사전캠프 TIL 5일차 (음양 더하기, 핸드폰 번호 가리기, 없는 숫자 더하기, 제일 작은 수 제거하기 - Kotlin) (0) | 2024.04.29 |
사전캠프 TIL 4일차 (하샤드 수, 두 정수 사이의 합, 콜라츠 추측, 서울에서 김서방 찾기, 나누어 떨어지는 숫자 배열 - Kotlin) (0) | 2024.04.25 |
사전캠프 TIL 2일차 (안드로이드 아키텍쳐 알아보기) (0) | 2024.04.23 |
사전캠프 TIL 1일차 (안드로이드와 코틀린 알아보기) (0) | 2024.04.22 |