목차
문제 설명
등차수열 혹은 등비수열 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 |
밑에 코드는 처음 작성한 코드다.
if (common.length < 2) {
// 배열에 최소 두 개 이상의 요소가 있어야 함
throw new IllegalArgumentException("배열에는 최소 두 개 이상의 요소가 필요합니다.");
}
// 등차수열인지 확인
int diff = common[1] - common[0]; // 첫 번째 두 항의 차이를 구함
boolean isArithmetic = true;
for (int i = 2; i < common.length; i++) {
if (common[i] - common[i - 1] != diff) { // 연속된 두 항의 차이가 동일하지 않으면
isArithmetic = false;
break;
}
}
if (isArithmetic) {
// 등차수열일 경우 다음 숫자 반환
return common[common.length - 1] + diff;
}
// 등비수열인지 확인
int ratio = common[1] / common[0]; // 첫 번째 두 항의 비율을 구함
boolean isGeometric = true;
for (int i = 2; i < common.length; i++) {
if (common[i] / common[i - 1] != ratio) { // 연속된 두 항의 비율이 동일하지 않으면
isGeometric = false;
break;
}
}
if (isGeometric) {
// 등비수열일 경우 다음 숫자 반환
return common[common.length - 1] * ratio;
}
// 등차수열도 등비수열도 아닐 경우 예외 발생
throw new IllegalArgumentException("배열은 등차수열이나 등비수열을 나타내지 않습니다.");
다음 코드는 좀 더 최적화한 코드이다.
class Solution {
public int solution(int[] common) {
// 배열의 길이 확인
int len = common.length;
// 등차수열인지 확인
int diff = common[1] - common[0]; // 첫 번째 두 항의 차이를 구함
if(common[2] - common[1] == diff){
return common[len - 1] + diff;
}else{
return common[len - 1] * common[2] / common[1];
}
}
}
원래 int ratio = common[1] / common[0]을 사용했지만 common[0]이 0으로 시작하면 런타임 에러가 발생한다.
따라서 common[2] / common[1]을 직접 넣어준다. 이것도 에러가 발생할 가능성이 있는 코드이긴하다..
'JAVA > 프로그래머스 코딩테스트 입문' 카테고리의 다른 글
[프로그래머스, LV.0] 안전지대 (0) | 2024.12.15 |
---|---|
[프로그래머스 LV.0] 연속된 수의 합 (2) | 2024.12.15 |
[프로그래머스, LV.0] OX퀴즈 (0) | 2024.12.15 |
[프로그래머스, LV.0] 다항식 더하기 (1) | 2024.12.15 |
[프로그래머스, LV.0] 특이한 정렬 (0) | 2024.12.15 |