개발노트/프로그래머스

프로그래머스 연속된 수의 합 코틀린

시계속세상은아직돌아가는중 2023. 8. 7. 11:46

https://school.programmers.co.kr/learn/courses/30/lessons/120923

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

package com.example.answersheet

fun main(){
    // num은 총 더하기 횟수 = intarray의 사이즈
    // total은 더한 결과값
    // result는 total이 나올 때 까지 더한 숫자들

    var result = mutableListOf<Int>()
    print("몇 번 더할건가요? :")
    var num = readLine()!!.toInt()
    print("결과값을 입력하세요 :")
    var total = readLine()!!.toInt()

    // num*x + 0+1+...num-1 = total

    var x = (total/num)-((num-1)/2)

    for( i in 0..num-1){

        result.add(x)
        x++
    }

    println(result)

}

 

검증은 list형태가 콘솔에 출력하기 편하므로 list로 진행하였다.

 

 

class Solution {
    fun solution(num: Int, total: Int): IntArray {
        var answer: IntArray = IntArray(num) 
        var start = (total/num)-((num-1)/2)
        
        for (i in 0 until num) {
            answer[i] = start
            start++
        }
        
        return answer
    }
}

해당 문제는 start식을 구하면 쉽게 구해지는 문제다.

 

예제 num 3 total 12 result [3,4,5]를 수학식으로 풀어내면 쉽게 나온다.

시작하는 숫자 예제에서는 3을 구해서 '연속된 수'이므로 시작되는 num만큼 ++해주면 되기 때문이다.

 

여기서 start를 구하는 식은

 

(n+0)+(n+1)+(n+2) ..+(n+x) = total

 

일 때 total = 12 num = 3일 때

 

(n+0) + (n+1) + (n+2) = 12

3n+3 = 12

 

을 식으로 변환하면

 

num*n + 0+1+...num-1 = total

가우스 식으로 n(n+1)/2를 이용하면

num*n+num(num-1)/2 = total

 

여기서 n을 정리해주고 코드에 넣으면

 

var x = (total/num)-((num-1)/2)

가 된다