[Programmers] Lv0 다음에 올 숫자 JAVA

2023. 1. 18. 21:19CS/자료구조 & 알고리즘

728x90

문제 출처

[프로그래머스 코딩 테스트 연습]

https://school.programmers.co.kr/learn/courses/30/lessons/120924

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제 풀이

등차수열이 아니면 등비수열이므로 등비수열과 등차수열을 구별하는 방법이 필요하다.

여기에서는 등차수열을 이용하여 이 문제를 풀 예정이다.

이후 등차 수열과 등비수열에 따라서 코드를 작성하면 된다.

 

등차수열인지 확인하는 방법

등차수열의 정의 : 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