개발노트/프로그래머스
프로그래머스 연속된 수의 합 코틀린
시계속세상은아직돌아가는중
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)
가 된다