프로그래머스: 다음에 올 숫자 (java)

MineeHyun·2024년 7월 2일
0

문제 풀이

목록 보기
9/25

자바 무지랭이이므로 껍데기만 자바일 수 있음
다른 사람들의 멋진 풀이를 보고 공부해보자

문제 설명

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

제한 사항

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

입출력 예


코드

class Solution {
    public int solution(int[] common) {
        
        int answer = 0;
        int len = common.length;
        if (common[len-1] - common[len-2] == common[len-2] - common[len-3]){
            answer = common[len-1] + common[len-1] - common[len-2];
        }
        else {
            answer = common[len-1] * common[len-1] / common[len-2];
            }
        return answer;
    }
}

풀이

  • 등차수열인지 검사한다. 등차수열이면 다음 값을 계산한다.
  • 등차수열이 아니면 등비수열이라고 치고 다음 값을 계산한다.

알게 된 것

  1. 자바에서는 배열 뒤에서부터 slicing할 때 array[-1] 같이 오프셋 못 쓴다.
    → 하고 싶으면 array[array.len-1] 처럼 쓸 수 있다.
  2. 자바의 exception은 다소 친절하다.... for length 3 같은 걸 알려주다니

다른 사람들의 멋진 풀이

  • 굳이 배열 맨 뒤에서 공차 또는 공비를 찾을 필요는 없었군
  • 공차나 공비는 맨 앞에서부터 찾아도 (0, 1로 계산해도) 아무 상관 없군...
  • 등비수열일 때 common[2]/common[1]을 하는 이유는 뭘까? [1]/[0] 해도 되지 않나?

    딱히 상관은 없는 것으로...

풀면서 궁금했던 것

자바의 int끼리 나누기 연산 결과는 float인가? 아니면 C처럼 몫만 주고 나머지는 버리나?

  • 정수끼리의 연산 결과는 정수
  • 실수를 포함하는 연산의 결과는 실수
  • 문제에서 공비를 구해서 계산하려면 (int)를 해줘야 하나? 했는데 그래야 했던 듯
  • 하지만 사실 공비가 정수이기 때문에 그럴 필요는 없었다...

명시적 형변환은 어떻게 하지

  • (int)variableName 처럼 하면 되는군

0개의 댓글