728x90
[문제 설명]
연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.
[입출력 예]
num | total | result |
3 | 12 | [3, 4, 5] |
5 | 15 | [1, 2, 3, 4, 5] |
4 | 14 | [2, 3, 4, 5] |
5 | 5 | [-1, 0, 1, 2, 3] |
[차근 차근 생각해보기]
- total / num을 하여 중앙값을 구해준다.
- (num - 1) / 2을 빼주면 첫번째 수를 구할 수 있다.
- 또는 등차수열의 공식을 이용한다.
[코드]
<수정전>
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int start = (total / num) - ((num - 1) / 2);
for (int i = 0; i < num; i++) {
answer[i] = start;
start++;
}
return answer;
}
}
<수정후>
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
for (int i = -100; i <= 100 ; i++) {
int result = (num * (i + ((i + num) - 1))) / 2;
if (result == total) {
for (int j = 0; j < answer.length; j++) {
answer[j] = i + j;
}
}
}
return answer;
}
}
[반성할 점]
처음에 짝수 홀수를 나누어 연속된 수의 합을 구하는 코드를 작성했었는데,
이렇게 하면 음수일때 어떻게 처리해야할지 몰라 결국 다른 사람의 풀이를 보고 풀었다.
그러다가 등차수열로 풀어보고 싶어서 다시 구현을 해보았다.
등차수열의 공식 (항수 * (첫째항 + 마지막항)) / 2이다.
여기서 항수는 num, 첫째항과 마지막항은 - 100부터 100까지 반복문을 돌면서 구할 수 있도록 하였다.
처음부터 등차수열을 이해하고 풀었으면 좋았을텐데..!
이런 수학적 공식도 보고 코드로 옮겨보니까 너무 재미있다!😁
아직 알고리즘적으로 생각하는게 많이 부족하니까 천천히 한단계 나아가보자!
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 더 맵게 (1) | 2024.01.07 |
---|---|
[프로그래머스] - 기사단원의 무기 (0) | 2024.01.07 |
[프로그래머스] - 전화번호 목록 (0) | 2023.12.13 |
[프로그래머스] - 프로세스 (0) | 2023.12.13 |
[프로그래머스] - 모의고사 (0) | 2023.12.13 |