CodingTest

프로그래머스 - 다음에 올 숫자 (JAVA)

쩡선영 2022. 12. 29. 08:46

프로그머스 다음에 올 숫자 0단계 문제 입니다!

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

 

프로그래머스

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

programmers.co.kr

 

● 문제 설명

등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.

<<제안사항>>

1)  2 < common의 길이 < 1,000

2)  -1,000 < common의 원소 < 2,000

3) 등차수열 혹은 등비수열이 아닌 경우는 없습니다.

4) 공비가 0인 경우는 없습니다.

 

● 내가 직접 짜본 코드

class Solution {
    public int solution(int[] common) {
        int answer = 0;
        
        //등차수열
        if((common[1]-common[0]) == (common[2]-common[1])){
            answer = common[common.length-1]+common[1]-common[0];
        }
        //등비수열
        else{
            if(common[0]==1){ //common[0]이 1일때 예외처리
                answer=common[common.length-1] * (common[2]-common[1]);
            }
            else{
             answer = common[common.length-1] * (common[1]-common[0]);   
            }
        }
        return answer;
    }
}

● 코드 해설

1) 첫번째 if문을 통해 등차수열을 계산하고

2) 두번째 if문으로 등비수열을 계산하는데

3) common[0]이 1일때 예외상황이라고 판단이 되어 따로 예외처리를 해줬습니다.

 

그런데... 제가 봐도 너무 끼워 맞췄다는 느낌이 들더라구요ㅠㅠㅠ

그래서 도움 요청을 해봤더니

감사합니다... 지민온니&nbsp;💜💜

이렇게 해결방법이 있더라고요!! 이런 방법은 상상도 하지 못했던 ㅠㅠ

 

● 개선한 코드

class Solution {
    public int solution(int[] common) {
        int answer = 0;
        
        //등차수열
        if((common[1]-common[0]) == (common[2]-common[1])){
            answer = common[common.length-1]+common[1]-common[0];
        }
        //등비수열
        else{
             answer = common[common.length-1] * (common[1]/common[0]);   
        }
        return answer;
    }
}

이렇게 하니 코드가 더욱 간단해지더라고요...

왜 몰랐을까 하염없이 후회했습니다 ㅎㅎㅎ