티스토리 뷰
내일배움캠프/Android 사전캠프
사전캠프 TIL 4일차 (하샤드 수, 두 정수 사이의 합, 콜라츠 추측, 서울에서 김서방 찾기, 나누어 떨어지는 숫자 배열 - Kotlin)
하몬드 2024. 4. 25. 16:56코드카타
하샤드 수
문제
정답
class Solution {
fun solution(x: Int): Boolean {
val sum = x.toString().map { it - '0' }.sum()
return x % sum == 0
}
}
x를 문자열로 변환한 뒤 각 자릿수를 더한 값인 sum을 선언한다.
x가 sum으로 나누어 떨어지는지를 판별하는 조건식을 반환한다.
Boolean타입을 반환하는 함수에서 조건식을 반환하게 되면
조건식이 참일 때는 true, 아닐 때는 false를 반환하게 된다.
두 정수 사이의 합
문제
정답
class Solution {
fun solution(a: Int, b: Int): Long {
var n: Long = 0
if (a < b) {
for (i in a..b) {
n += i
}
} else {
for (i in b..a) {
n += i
}
}
return n
}
}
b가 a보다 큰 값을 가질 땐 b~a의 수를 n에 더해준다.
콜라츠 추측
문제
정답
class Solution {
fun solution(num: Int): Int {
var n: Long = num.toLong()
var cnt: Int = 0
while (n != 1L) {
if (n % 2 == 0L) {
n /= 2
cnt += 1
} else {
n = n * 3 + 1
cnt += 1
}
}
return if (cnt >= 500) -1 else cnt
}
}
변환할 수를 저장할 n, 작업 횟수를 저장할 cnt를
값의 변환이 가능한 var로 선언해준다.
while문을 사용해 n의 값이 1이 될 때까지 반복문을 돌려준다.
var n: Long = num.toLong()
n을 Int로 선언하게 되면 n = n * 3 + 1 에서
Int의 범위를 초과함으로써 오버플로우가 발생해 시간초과가 나게된다.
그래서 Long타입으로 n을 선언해줘야 한다.
n은 Long타입이므로 N이 포함된 조건문에서 오른쪽에 있는 숫자 뒤에
L을 붙여줌으로써 타입을 맞춰줘야 한다.
서울에서 김서방 찾기
문제
정답
class Solution {
fun solution(seoul: Array<String>): String {
val index = seoul.indexOf("Kim")
return "김서방은 ${index}에 있다"
}
}
indexOf() 함수로 특정 문자열의 위치를 찾을 수 있다.
나누어 떨어지는 숫자 배열
문제
정답
class Solution {
fun solution(arr: IntArray, divisor: Int): IntArray {
val result = arr.filter { it % divisor == 0 }
return if (result.isEmpty()) intArrayOf(-1) else result.sorted().toIntArray()
}
}
filter 함수를 이용해 divisor로 나누어 떨어지는 값만 들어있는 배열 result를 만든다.
result 배열이 비어있으면 [-1] 반환, 값이 들어있다면 오름차순 정렬한 List<Int>형 배열을 반환한다
val arr4 = intArrayOf(1, 3, 5, 10) // [1, 3, 5, 10]
val divisor = 5
val result = arr.filter { it % divisor == 0 }
print(result.toIntArray()) // [5, 10]
filter 함수는 배열의 요소를 순회하면서 특정 조건을 만족하는 요소만을 추출한다.
filter 함수는 List<T>형을 반환하므로 solution함수에선 정수 배열로 변환해줘야 한다.
'내일배움캠프 > Android 사전캠프' 카테고리의 다른 글
사전캠프 TIL 6일차 (안드로이드 개발환경 세팅) (0) | 2024.04.30 |
---|---|
사전캠프 TIL 5일차 (음양 더하기, 핸드폰 번호 가리기, 없는 숫자 더하기, 제일 작은 수 제거하기 - Kotlin) (0) | 2024.04.29 |
사전캠프 TIL 3일차 (안드로이드 확장 라이브러리 알아보기) (0) | 2024.04.24 |
사전캠프 TIL 2일차 (안드로이드 아키텍쳐 알아보기) (0) | 2024.04.23 |
사전캠프 TIL 1일차 (안드로이드와 코틀린 알아보기) (0) | 2024.04.22 |