본문 바로가기
프로그래머스/[프로그래머스 - JAVA] Lv.0

[프로그래머스 - JAVA] 연속된 수의 합

by 코딩하는 흰둥이 2023. 3. 18.
반응형


입출력 예 설명

입출력 예 #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입니다.

 

  • 내 풀이
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
    public int[] solution(int num, int total) {
        int[] answer = {};
        
        // total 값과 비교하기 위한 변수
		int sum = 0;
		// for (int i = num; i <= total; i++) { 으로 하니 4번째 테스트를 돌릴수 없음
        // -num 부터 total을 포함해서 반복
        for (int i = -num; i <= total; i++) {
        // num을 포함하여 total이 되는 값을 담기위한 list
            List<Integer> check = new ArrayList<>();
            // 시작하는 첫 값을 담는다
            sum = i;
            check.add(i);
            // 순차적으로 + 해야 하기 때문에 i + 1 , num를 포함해야하기 때문에 num+i
            for (int j = i+1; j < num+i; j++) {
                sum += j;
                check.add(j);
                // sum과 total 값이 같으면 연속된 수의 합
                if (sum == total){
                // arrayList를 stream을 이용하여 값을 순차적으로 넣어줌
                    answer = check.stream().mapToInt(v ->v).toArray();
                    break;
                }
            }
            // 연속되는 값을 찾게 되면 바깥 for문 종료
            if(sum == total){
                break;
            }
        }
        
        return answer;
    }
}

테스트 케이스 1번과 7번이 계속 실패하여 다른 분의 풀이를 참조한다.

 

 

  • 다른 사람 풀이
class Solution {
    public int[] solution(int num, int total) {
        int[] answer = {};

        answer = new int[num];
        int middleNumber = total / num;
        int subtracNumber = total % num == 0 ? num / 2 : num / 2 - 1;

        int startNumber = middleNumber - subtracNumber;

        for (int i = 0; i < num; i++) {
            answer[i]= startNumber + i;
        }

        return answer;
    }
}

입출력 예를 보니 num의 수 만큼 연속되는 수가 되는 것으로 보인다

그래서 answer의 크기를 num로 초기화 시킨것

해당 코드로 값이 어떻게 생성되는지 이해는 되지만 위 풀이 처럼 생각을 못하겠다....

댓글