먼저 common의 원소를 보면 등차수열은 각 원소의 차수가 같습니다. (1,2,3,4 로 예를 들면 2 -1 = 1, 3 - 2 = 1, 4 - 3 = 1)
그리고 등비수열을 보면 각 원소의 차수가 다르다는 것을 확인할 수 있고 3번쨰 원소까지만 확인하면 마지막 다음 값을 알 수 있다는 것을 확인했습니다.
그래서 if문으로 두 번째 원소에서 첫 번째 원소를 뺀 값과 세 번째 원소에서 두 번째 원소를 뺀 값이 같으면 등차수열임을 확인할 수 있고 그게 아니라면 등비수열임을 확인할 수 있습니다.
첫 번째 if문 로직에는 등차수열이기 때문에 common의 마지막 원소에 n+1 - n 값을 더해주면 되고
두 번째 else문 로직에는 등비수열이기 때문에 common의 마지막 원소에 n+1 / n 값을 곱해주면 됩니다.
package com.namji.codingtest;
public class 다음에_올_숫자 {
public static void main(String[] args) {
/*
정수 배열 common이 매개변수로 주어집니다.
등차수열 혹은 등비수열 common이 매개변수로 주어질 때,
마지막 원소 다음으로 올 숫자를 출력하는 문제입니다.
제한 사항
- 2 < common의 길이 < 1,000
- -1,000 < common의 원소 < 2,000
- common의 원소는 모두 정수입니다.
- 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
- 등비수열인 경우 공비는 0이 아닌 정수입니다.
입출력 예
common result
[1, 2, 3, 4] 5
[2, 4, 8] 16
[-3, -6, -9] -12
[2, -4, 8] -16
[5, 15, 45] 135
입출력 설명
#1
[1, 2, 3, 4]는 공차가 1인 등차수열이므로 다음에 올 수는 5이다.
#2
[2, 4, 8]은 공비가 2인 등비수열이므로 다음에 올 수는 16이다.
*/
int[] common = {2, -4, 8};
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]);
}
System.out.println(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];
} else {
int quotient = common[1] / common[0];
answer = common[common.length - 1] * quotient;
}
return answer;
}
}