Algorithm

[프로그래머스] 연속된 수의 합(등차수열의 합)

야리니 2023. 3. 7. 09:56
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
반응형