코딩테스트/Programmers
[Programmers] 입문) 연속된 수의 합
HONGGG
2023. 7. 17. 18:12
연속된 수의 합
문제 설명
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
제한사항
- 1 ≤ num ≤ 100
- 0 ≤ total ≤ 1000
- num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.
입출력 예
입출력 예 #1
num = 3, total = 12인 경우 [3, 4, 5]를 return합니다.
입출력 예 #2
num = 5, total = 15인 경우 [1, 2, 3, 4, 5]를 return합니다.
입출력 예 #3
4개의 연속된 수를 더해 14가 되는 경우는 2, 3, 4, 5입니다.
입출력 예 #4
설명 생략
이번 문제는 처음 감을 잡지 못하여 0부터 정답이 나올때까지 1씩 증가하며 순차적으로 덧셈을 하였다.
두번째 접근법은 두포인터 알고리즘을 통해 정답을 찾으려하였다.
위 코드들로 어느 정도 성공적인 테스트가 되었으나 일정 테스트 케이스를 계속 통과하지 못하였다.
이에 질문하기를 통해 "낙방여우"님의 힌트를 듣고 바로 코드를 작성해보았다.
https://school.programmers.co.kr/questions/46600
using System;
public class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int start = (total / num) - (num / 2) + ((num % 2 == 0) ? 1 : 0);
for (int j = 0; j < num; j++)
answer[j] = start++;
return answer;
}
}
낙방여우님의 말씀은 다음과 같았다.
- total / num은 정답의 중간지점을 반환한다.
- 중간 지점에서 num의 절반 정도 아래로 향한다.
- num이 짝수라면 올림을하여 옳바른 위치에서부터 시작하도록 한다.
낙방여우님 다른 곳에서도 자주 보이셨지만 항상 엄청난 도움이 되셨다.
이번에도 찾지 못했던 수식을 힌트로 주셨던 분들과 어렵게 생각했던 문제를 정말 쉽게 힌트 주신 낙방여우님께 감사를 올려드린다.