728x90
반응형
https://school.programmers.co.kr/learn/courses/30/lessons/120923
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

문제 푼 코드
public class Lv0_연속된수의합_20230307 {
class Solution {
public int[] solution(int num, int total) {
int[] answer = new int[num];
int i = 0;
while(true) {
int tempI = i;
int cnt = 0;
int sum = 0;
int j = 0; // 배열의 인덱스
while(cnt < num) {
sum += tempI;
answer[j++] = tempI;
tempI++;
cnt++;
} // while
if(sum == total) {
return answer;
} else {
if(sum < total) {
i++;
}
if(sum > total) {
i--;
}
} // if
} // while
} // solution
} // Solution Class
} // class
오랜 고민을 하고 결국 풀게 되었는데 알고보니 이 문제는 등차수열의 합을 구해서 풀 수 있는 간단한 문제였다. 수학적 지식이 부족해서 문제를 푸는데 고생을 했다.
내가 푼 방법은 while 문을 돌리면서 sum이 total과 같을 때 까지 i의 값을 증가하거나 감소시키면서 계속 구해나갔다.
해당 문제를 등차수열의 합으로 풀면 다음과 같다.
int[] answer = new int[num];
int check = num * (num + 1) / 2; // 등차 수열 합
int start = (total - check) / num + 1; // 시작하는 값 확인
for(int i = 0; i < answer.length; i++){
answer[i] = start + i;
}
return answer;
직전에 등차수열과 등비수열 관련한 문제를 풀었는데 해당 문제가 등차수열과 관련이 있다는 것을 왜 생각하지 못했을까ㅠㅠ 다음에 이런 문제가 나온다면 꼭 해당 방법으로 풀어봐야겠다.
728x90
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] 평행 (직선의 평행 조건) (0) | 2023.03.15 |
---|---|
[프로그래머스] 유한소수 판별하기(유클리드호제법, 소인수분해) (0) | 2023.02.27 |
[프로그래머스] 문자열 정렬하기(1) (0) | 2023.02.07 |
[프로그래머스] 분수의 덧셈 / 유클리드 호제법(최대공약수 구하기) (0) | 2023.01.30 |
[프로그래머스] 단어 변환 / DFS/BFS(그래프탐색) (0) | 2022.08.15 |