본문 바로가기

개발 노트/알고리즘[Kotlin]

프로그래머스 알고리즘 문제[두 정수 사이의 합]

# 문제

두 정수 a, b가 주어졌을 때 a와 b 사이에 속한 모든 정수의 합을 리턴하는 함수, solution을 완성하세요.
예를 들어 a = 3, b = 5인 경우, 3 + 4 + 5 = 12이므로 12를 리턴합니다.

 

 

# 제한조건

a와 b가 같은 경우는 둘 중 아무 수나 리턴하세요.
a와 b는 -10,000,000 이상 10,000,000 이하인 정수입니다.
a와 b의 대소관계는 정해져있지 않습니다.

 


# 입출력 예

ex) a=3 ,b =5  / return = 2+4+5 =12

ex) a=3, b=3 / return = 3

ex) a=5, b=3 / return = 5+4+3 = 12

 

 

 

# 풀이

class Solution {
    
    fun solution(a: Int, b: Int): Long {
        var answer : Long = 0

        if (a < b){
            for(x in a..b){    
                answer += x        
            }
        }

        if (a > b){
            for(x in b..a){  
                answer += x        
            }
        }

        return answer
    }
}

 

for문을 사용해서 a부터 b까지 돌면서 각각의 값을 누적시켜서 answer에 넣어주는식으로 풀었다

그런데 a=5,b=3일때처럼 a값이 더 클때를 생각해야되기때문에 if문을 사용해서 a가 b보다 작을때와 a가 b보다 클때를 각각 나눠줬다

 

 

 

 

# 다른사람의 풀이

fun solution(a: Int, b: Int) : Long {
    val start : Long = (if(a > b) b else a).toLong()  
    val end : Long = (if(a > b) a else b).toLong()     
    return (start..end).sum()
}

 

sum()을 사용해서 숫자타입의 원소의 합을 반환할 수 있다

 

 

fun solution(a: Int, b: Int) =

    if (a<b){
        ((a..b).average() * (b - a + 1)).toLong()

    }else if(a>b) {
        ((b..a).average() * (a - b +1)).toLong()

    }else a.toLong()