[Programmers] Lv0 다음에 올 숫자 JAVA
2023. 1. 18. 21:19ㆍCS/자료구조 & 알고리즘
728x90
문제 출처
[프로그래머스 코딩 테스트 연습]
https://school.programmers.co.kr/learn/courses/30/lessons/120924
문제 풀이
등차수열이 아니면 등비수열이므로 등비수열과 등차수열을 구별하는 방법이 필요하다.
여기에서는 등차수열을 이용하여 이 문제를 풀 예정이다.
이후 등차 수열과 등비수열에 따라서 코드를 작성하면 된다.
등차수열인지 확인하는 방법
등차수열의 정의 : 1,3,5,7,9,⋯처럼 연속한 두 항의 차가 일정한 수열
위에서 간단하게 보면 2씩 증가하는 등차 수열이다.
즉 1, 3, 5를 봤을 때 3-1 = 2, 5-3 = 2로 인접한 차는 같다.
더 보기 : 자세한 코드 설명
더보기
코드 설명
문제의 제한 사항에서 common의 길이는 2보다 크다고 했으므로 크기는 3 이상이다.
즉 index 0, 1, 2는 무조건 있으므로 이 3개를 비교하면 된다.
1, 0 그리고 2, 1의 차를 비교하면 된다.
이때 뒤에서 앞으로 뺐으면 이후 비교할 것도 뒤에서 앞으로 빼야 한다.
public boolean isArithmeticSequence(int[] common) {
return common[1] - common[0] == common[2] - common[1];
}
다음에 올 숫자 구하기
등차 수열이라면 마지막에서 공차를 더하면 된다.
등비 수열이라면 마지막에서 공비를 곱하면 된다.
public int solution(int[] common) {
if (isArithmeticSequence(common))
return common[common.length-1] + common[1] - common[0];
else
return common[common.length-1] * (common[1]/common[0]);
}
소스 코드
public class Solution {
public boolean isArithmeticSequence(int[] common) {
return common[1] - common[0] == common[2] - common[1];
}
public int solution(int[] common) {
if (isArithmeticSequence(common))
return common[common.length-1] + common[1] - common[0];
else
return common[common.length-1] * (common[1]/common[0]);
}
}
728x90
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
[Programmers] Lv0 잘라서 배열로 저장하기 JAVA (0) | 2023.01.20 |
---|---|
[Programmers] Lv0 문자열 밀기 JAVA (0) | 2023.01.19 |
[Programmers] Lv0 종이 자르기 JAVA (0) | 2023.01.18 |
[Programmers] Lv0 연속된 수의 합 JAVA (0) | 2023.01.18 |
[Programmers] Lv0 옹알이(1)(2) JAVA (0) | 2023.01.17 |