💬 문제 설명
등차수열 혹은 등비수열 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 n = common.length;
int diff = common[1] - common[0];
double ratio = (double) common[1] / common[0];
boolean isArithmetic = true;
for (int i = 2; i < n; i++) {
if (common[i] - common[i - 1] != diff) {
isArithmetic = false;
break;
}
}
boolean isGeometric = true;
for (int i = 2; i < n; i++) {
if ((double) common[i] / common[i - 1] != ratio) {
isGeometric = false;
break;
}
}
if (isArithmetic) {
answer = common[n - 1] + diff;
} else if (isGeometric) {
answer = (int) (common[n - 1] * ratio);
} else {
answer = -1;
}
return answer;
}
}
✏ 해결방법 & 배운점
공차 구하기
- 배열의 첫 번째 두 항목 사이의 차이를 구하여 변수 `diff`에 저장합니다.
- 예를 들어, 배열이 [3, 6, 9]일 경우, diff는 `6 - 3 = 3` 이 됩니다.
공비 구하기
- 배열의 첫 번째 두 항목의 비율을 저장합니다.
- 예를 들어, 배열이 [2, 6, 18]일 경우, ratio는 `6 / 2 = 3.0`이 됩니다.
등차 수열 확인
- `isArithmetic` 변수를 true로 초기화합니다. 이는 배열이 등차수열인지 여부를 추적합니다.
- 배열의 두 번째 항목부터 끝까지 순회하면서, 각 항목과 이전 항목의 차이가 diff와 같은지 확인합니다.
- 만약 하나라도 차이가 다르면, `isArithmetic` 을 false 로 설정하고 루프를 종료합니다.
등비수열 확인
- `isGeometric` 변수를 true로 초기화합니다. 이는 배열이 등비수열인지 여부를 추적합니다.
- 배열의 두 번째 항목부터 끝까지 순회하면서, 각 항목과 이전 항목의 비율이 ratio와 같은지 확인합니다.
- 만약 하나라도 비율이 다르면, `isGeometric`을 false로 설정하고 루프를 종료합니다.
최종 계산
- isArithmetic가 true이면, 배열의 마지막 항목에 diff를 더한 값을 answer에 저장합니다.
- isGeometric가 true이면, 배열의 마지막 항목에 ratio를 곱한 값을 answer에 저장합니다.
- 두 조건 모두 만족하지 않으면, answer에 -1을 저장합니다.
'PS > 프로그래머스 입문 100제' 카테고리의 다른 글
[프로그래머스] LV.0 분수의 덧셈 - 자바 [97/100] (1) | 2024.07.13 |
---|---|
[프로그래머스] LV.0 연속된 숫의 합 - 자바 [96/100] (1) | 2024.07.12 |
[프로그래머스] LV.0 OX 퀴즈 - 자바 [94/100] (0) | 2024.07.12 |
[프로그래머스] LV.0 다항식 더하기 - 자바 [93/100] (1) | 2024.07.12 |
[프로그래머스] LV.0 문자열 밀기 - 자바 [92/100] (0) | 2024.07.05 |