본문 바로가기
개발로그/알고리즘

프로그래머스 Lv.0 다음에 올 숫자

by 쩜징 2023. 7. 19.

프로그래머스 Lv.0 다음에 올 숫자


등차수열 혹은 등비수열 common이 매개변수로 주어질 때,

마지막 원소 다음으로 올 숫자를 return하라.

 

common의 원소는 모두 정수이고,

등차수열 혹은 등비수열이 아닌 경우는 없다.

 

** 풀이 방법

 

common 배열이 등차수열인지 등비수열인지

검증할 ArrayList를 생성했다.

먼저 연속된 두 원소의 차를 ArrayList에 저장한다.

List<Integer> cha = new ArrayList<>();

for (int i=0; i<common.length-1; i++) {
   cha.add(common[i+1]-common[i]);
}

 

ArrayList에 저장된 값이 모두 같으면 등차수열

같지 않으면 등비수열이므로

for (int i=0; i<cha.size()-1; i++) {
    if (cha.get(i) == cha.get(i+1))
        cnt++;
    //등차수열이라면 cnt가 cha.size()-1과 같아짐
    else
        bi = common[1]/common[0];
    //등비수열의 공비를 구함
}

 

등차수열일 때는 공차를 common의 마지막 원소에 더해준다.

등비수열일 때는 연속된 두 원소를 나눈 몫이 공비가 된다.

마찬가지로 common의 마지막 원소에 공비를 곱해준다.

if (cnt == cha.size()-1) answer = common[common.length-1] + cha.get(0); //등차
else answer = common[common.length-1] * bi; //등비

 

<> 전체 코드 </>

import java.util.*;
class Solution {
    public int solution(int[] common) {
        int answer = 0;
        List<Integer> cha = new ArrayList<>();
        int bi = 0;
        int cnt = 0;
        for (int i=0; i<common.length-1; i++) {
           cha.add(common[i+1]-common[i]);
        }
        for (int i=0; i<cha.size()-1; i++) {
            if (cha.get(i) == cha.get(i+1))
                cnt++;
            else
                bi = common[1]/common[0];
        } 
        if (cnt == cha.size()-1) answer = common[common.length-1] + cha.get(0);
        else answer = common[common.length-1] * bi;
        return answer;
    }
}

반응형

댓글