본문 바로가기
JAVA/프로그래머스

[Lv.0] 프로그래머스 - 연속된 수의 합 : Java

by ♡˖GYURI˖♡ 2024. 6. 21.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

이해하기

첫 숫자를 찾아서 num 개수만큼 담아야 할까? 그치만 첫 숫자는 어떻게 찾지? 라고 고민했지만 방법이 보이지 않았다...

 

참고한 블로그⬇️

 

코딩테스트 연습 > 연속된 수의 합 - JAVA

문제 설명 연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solu

fall-in-dream.tistory.com

 

찾아보니 내가 아주 잘못 접근했다는 것을 알게 되었다.

문제 예시와 같이 num = 3 이고, total = 12 일 때, 중요한 것은 가운데 숫자인 4라는 점이다!

3과 5는 각각 4와는 -1, +1 차이가 나고, 이를 전부 더하면 4 * num 과 같은 결과가 나오게 된다.

시작 숫자인 3은 total / num - num / 2 와 같다고 볼 수 있을 것이다.

 

그럼 num이 홀수인 경우에는 어떻게 해야할까? 이 또한 문제의 예시에 나와있다.

total / num = 3이고, 이를 기준으로 하여 앞으로 num / 2 - 1만큼, 뒤로 num / 2 만큼을 구하면 된다.

시작 숫자인 2는 total / num - num / 2 + 1 과 같다고 볼 수 있을 것이다.

 

이 두 가지 예시를 통해 우리는 num이 홀수일 경우에는 total / num - num / 2부터, num이 짝수일 경우에는 total / num - num / 2 + 1부터 배열에 추가하면 된다는 것을 알 수 있었다.

 

 

문제풀이

class Solution {
    public int[] solution(int num, int total) {
        int[] answer = new int[num];
        boolean isOdd = (num % 2 == 1) ? true : false;
        
        if (isOdd) {
            int start = total / num - num / 2;
            for (int i = 0; i < num; i++) {
                answer[i] = start++;
            }
        } else {
            int start = total / num - num / 2 + 1;
            for (int i = 0; i < num; i++) {
                answer[i] = start++;
            }
        }
        
        return answer;
    }
}