일기 대신 코드 슬쩍

[프로그래머스][JAVA] Lv0. 다음에 올 숫자 본문

코딩테스트/프로그래머스(JAVA)

[프로그래머스][JAVA] Lv0. 다음에 올 숫자

코코자 2024. 3. 24. 18:41

문제 설명

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


제한사항

  • 2 < common의 길이 < 1,000
  • 1,000 < common의 원소 < 2,000
    • common의 원소는 모두 정수입니다.
  • 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
  • 등비수열인 경우 공비는 0이 아닌 정수입니다.

입출력 예

common result

[1, 2, 3, 4] 5
[2, 4, 8] 16

입출력 예 설명

입출력 예 #1

  • [1, 2, 3, 4]는 공차가 1인 등차수열이므로 다음에 올 수는 5이다.

입출력 예 #2

  • [2, 4, 8]은 공비가 2인 등비수열이므로 다음에 올 수는 16이다.

아이디어

등차수열이랑 등비수열,,,, 정말 오랜만에 들어서 당황했다.

개념을 한 번 정리해보자면?

<aside> 💡 등차수열: 연속된 두 항의 차가 일정한 수열 등비수열: 연속된 두항의 비가 일정한 수열

</aside>

그렇다면, 등차수열인 경우와 등비수열인 경우로 나누어서 answer를 표현해주면 될 것 같다.

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]);
        }
        
        if (common[1]/common[0] == common[2]/common[1]) { // 등비수열
            answer = common[common.length-1]* (common[1]/common[0]);
        }
        return answer;
    }
}

어라.. 테케는 통과했는데 안 되네…. 근데 생각해보면 앞에만 확인하니까 틀리는 경우가 있을 듯? 하다.

그러면 차라리 처음이랑 마지막 확인해주면 될 듯?

어라.. 이 문제가 아닌가보다. 생각해보니까 if문을 2개 넣어서 둘 다 실행되는 경우가 있을 까봐

else if로 바꾸니까 됐다. ㅎㅅㅎ

일단 성공~


문제 풀이

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[1]/common[0] == common[2]/common[1]) { // 등비수열
            answer = common[common.length-1]* (common[1]/common[0]);
        }
        return answer;
    }
}

+3