https://school.programmers.co.kr/learn/courses/30/lessons/120923
문제
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
제한사항
1 ≤ num ≤ 100
0 ≤ total ≤ 1000
num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
풀이
class Solution {
fun solution(num: Int, total: Int): IntArray {
val x = (total / num.toFloat() - (num - 1) / 2.toFloat()).toInt()
return IntArray(num) { idx -> x + idx }
}
}
이렇한 문제들의 경우 문제를 풀기위해서는 수학공식을 사용할경우 도움이됩니다.
연속된 수열의 합을 구하는 공식은
* 수열의 합 = (수열의 처음값 + 수열의 마지막값)/2 * 수열의 크기 입니다.
이걸 다르게 보면
* (수열의 처음값 + 수열의 마지막값)/2*num = total 입니다.
또 이걸 다른게보면
* total*2/num = (수열의 처음값 + 수열의 마지막값) 입니다.
그리고
*(수열의 처음값 + 수열의 마지막값) = (수열의 처음값 + 수열의 처음값 + num - 1) 이기도 합니다.
그렇다면
total*2/n = (수열의 처음값 + 수열의 처음값 + num - 1)
=> 수열의 처음값*2 = total*2/num-num+1
=> 수열의 처음값 = total/num - (num-1)/2
그렇다면 결과는 수열의 첨음값부터 수열의 첨음값 + num 전까지의 값을 IntArray로 만들어 반환 하면 끝입니다.
결과
'코틀린 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - n의 배수 고르기 (Kotlin) (0) | 2023.07.28 |
---|---|
[프로그래머스] - 로그인 성공? (Kotlin) (0) | 2023.07.28 |
[프로그래머스] - 직사각형 넓이 구하기 (Kotlin) (0) | 2023.07.28 |
[프로그래머스] - 이진수 더하기 (Kotlin) (0) | 2023.07.28 |
[프로그래머스] - 머쓱이보다 키 큰 사람 (Kotlin) (0) | 2023.07.28 |