[프로그래머스] Level0. 연속된 수의 합

Benjamin·2023년 2월 26일
0

프로그래머스

목록 보기
31/58

나는 이게 연속된 수의 합이라서 처음에 투 포인터 알고리즘을 생각했다.
하지만 기준 배열의 시작점을 어떻게 잡아야할지 도무지 감이오지 않았다.
그래서 접근법을 찾아보았다.

접근법

기본형 : [1,2,3,4,5] -> num = 5, total = 15
오른쪽으로 한칸 이동 : [2,3,4,5,6] -> num = 5, total = 20
오른쪽으로 한칸 이동 : [3,4,5,6,7] -> num = 5, total = 25

결론:
오른쪽으로 한칸씩 이동할때마다 모든 숫자가 1씩 늘어나서.. total += num 이 된다..

내 코드

class Solution {
    public int[] solution(int num, int total) {
        int[] answer = new int[num];
        int sum=0;
        int index =1;
        for(int i=1; i<=num; i++) {
            sum += i;
        }
        while(sum != total) {
            if(sum < total) {
                index++;
                sum += num;
            } else if(sum > total) {
                index--;
                sum -= num;
            }
        }
        for(int i=0; i<num;i++) {
            answer[i] = index++;
        }
        return answer;
    }
}

반복문을 많이 사용한것같아서 다른 풀이도 공부한다.

다른 코드

class Solution {
        public int[] solution(int num, int total) {
                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;
        }
}
  • 우선 연속된 숫자의 합은 반복문이아닌, 수학공식을 사용했다.
  • 나는 합의 시작지점을 합이 total보다 큰지작은지에따라 증감시키며 같아질때까지 반복문을 돌렸지만, 이 코드에서는 규칙을 통한 공식을 사용해 시작지점을 바로 잡았다.

0개의 댓글