class Solution {
fun solution(a: Int, b: Int): Long {
var result = 0L
when {
a == b -> result = a.toLong()
a < b -> for(n in a .. b) result += n
a > b -> for(n in b .. a) result += n
}
return result
}
}
두 정수 사이의 합을 구하는 문제이다.
a와 b를 파라미터로 받고 대소 관계를 따져서 그에 맞는 for문을 돌려주어 문제를 해결하였다.
그런데 이 코드보다 더 효율적인 코드를 찾았다.
class SumBetweenTwoIntegers {
fun solution(a: Int, b: Int): Long = (abs(a - b) + 1L) * (a + b) / 2
}
단 한줄만에 끝난 이 코드는 등차수열의 차를 이용한 풀이라고 한다.
(두 사이의 차 + 1) * (두 사이의 합) / 2
의 값이 두 사이의 값들의 합이 나오는 공식을 이용한 풀이이다.
역시 수학 공식도 같이 공부하면 좋을 것 같다...
다음 문제를 보자.
서울에서 김서방 찾기
//서울에서 김서방 찾기
class FindKimSeobangInSeoul {
fun solution(seoul: Array<String>): String = "김서방은 ${seoul.indexOf("Kim")}에 있다"
}
해당 문제는 조건의 맞는 값의 인덱스를 반환해주는 indexOf() 메서드를 사용해 문제를 풀었다.
핸드폰 번호 가리기
//핸드폰 번호 가리기
class HideCellPhoneNumber {
fun solution(phone_number: String): String =
phone_number.mapIndexed { index, c ->
if (phone_number.length - 5 < index) c else "*"
}.joinToString(separator = "")
}
이 문제는 어려워서 답안을 보았다ㅜㅜ
mapIndexed 메서드를 사용해 index와 해당 객체를 넘겨받고,
phone_number의 길이에서 5를 뺀 것이 index 보다 더 아래 있는 문자열들(마지막 4자리를 제외한 문자열들)은
그대로 출력하고, 나머지는 별 표시로 출력하게 두었다.
이렇게 변환하고 List를 반환해주는데 이 List를 joinToString 메서드를 이용해