링크 : 프로그래머스 > Level 0 > 다음에 올 숫자
등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.
20분
enum SequenceType {
ARITHMETICAL, // 등차수열
GEOMETRIC // 등비수열
}
public int solution(int[] sequence) {
// 주어진 입력이 등차 수열인지, 등비 수열인지 판단합니다.
SequenceType sequenceType = checkSequenceType(sequence);
// 등차 또는 등비를 구합니다.
int regularParam = calculateRegularParam(sequence, sequenceType);
// 마지막 항목에서 등차 또는 등비를 사용해 해답을 구합니다.
return getNextNum(sequence[sequence.length - 1], sequenceType, regularParam);
}
private SequenceType checkSequenceType(int[] sequence) {
assert sequence.length > 2;
int diff = sequence[1] - sequence[0];
if (sequence[2] - sequence[1] == diff) {
return SequenceType.ARITHMETICAL;
} else {
return SequenceType.GEOMETRIC;
}
}
private int calculateRegularParam(int[] sequence, SequenceType type) {
assert type == SequenceType.ARITHMETICAL || type == SequenceType.GEOMETRIC;
assert sequence[0] != 0;
if (type == SequenceType.ARITHMETICAL) {
return sequence[1] - sequence[0];
} else {
return sequence[1] / sequence[0];
}
}
private int getNextNum(int lastItem, SequenceType type, int regularParam) {
assert type == SequenceType.ARITHMETICAL || type == SequenceType.GEOMETRIC;
if (type == SequenceType.ARITHMETICAL) {
return lastItem + regularParam;
} else {
return lastItem * regularParam;
}
}