티스토리 뷰

728x90

문제 설명

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

 

입출력 예

num total result
3 12 [3,4,5]
5 15 [1,2,3,4,5]
4 14 [2,3,4,5]
5 5 [-1, 0, 1,2,3]

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/120923

 

 

프로그래머스

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

programmers.co.kr

 

 


 

문제 해결 과정

 

반복문을 사용하여 연속된 수 num 개의 합을 구한 다음 total 과 비교하여 작으면 연속된 수의 시작을 증가하였고,

반면에 total 값보다 커지면 연속된 수의 시작을 음수로 시작하게 하였다.

 

 

class Solution {
    public int[] solution(int num, int total) {
        int[] answer = new int[num];
        int sum = 0;
        int cnt = 0 ;

        while (true){

            for (int i = cnt; i < cnt + num; i++) {
                sum += i;
            }
            if(sum < total){
                cnt++;
            }
            else if (sum > total){
                if(cnt <= -1){
                    cnt--;
                }
                else if(cnt >= 0){
                    cnt = -1;
                }
            }
            else if(sum == total){
                break;
            }
            sum = 0;
        }
        
        for(int i=0; i < num; i++){
            answer[i] = cnt + i;
        }
        
        return answer;
    }
}

 

 


 

주어진 입출력 예를 기준으로 코드를 작성 했을 때는 전혀 문제 없이 모든 케이스가 맞게 나와서 제출을 하였지만.

테스트 9, 10 에서는 시간 오버로 실패가 나왔다.

 

분명 코드에는 오류가 없는 것 같았는데 문제점을 처음에 찾지 못하였다.

 

문제점은 연속된 수의 시작이 양수일때는 전혀 문제가 없었지만, 음수 일때 오류가 발생하였다.

연속된 수의 시작을 -1로 바꾸고 total 과 같도록 계속 감소해야하는데 if 문 조건을 바꾸면서 문제를 해결할 수 있었다.

 

num = 3, total = -6 인 경우는 [-3, -2, -1] 이 되어야한다.

이 케이스를 생각하면서 코드를 수정하니 통과 할 수 있었다.

 

 

 

 

 

 

728x90