달달한 스토리

728x90
반응형

출처 핀터레스트

 

배고프다.. 다이어트는 너무 힘들다.

 

문제를 풀어보자.

 

두 정수 사이의 합

 

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 메서드를 이용해

 

구분자 없이(separator = "") 출력해주면 된다.

728x90
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading