Lv 0. 다음에 올 숫자

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

 

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> common) {
    int answer = 0;
    int a= common[0];
    int b= common[1];
    int c= common[2];
    int len=common.size();
    int last=len-1;
    if(a+c==2*b) return 2*common[last]-common[last-1]; 
    else return common[last]*common[last]/common[last-1];
}

0번째 원소, 1번째 원소, 2번째 원소의 관계가 등차수열인지 등비수열인지 확인해서, 등차수열이면 2b= a+c 를 만족하므로 구해야 하는 항을 위의 공식을 통해 구하고, 등비수열이면 b*b= a*c 라는 공식을 통해서 구하는 형태로 작성하였다. 

 

막상 이렇게 구하고 다른 사람의 풀이를 보니, 조금 더 간결하게 표현하고 이해하기 편한 형태의 코드가 있어서 첨부한다. 

#include <string>
#include <vector>

using namespace std;

int solution(vector<int> common) {
    int answer = 0;
    if(common[0] - common[1] == common[1] - common[2]){
        return common.back() - (common[0] - common[1]);
    }
    else{
        return common.back() * (common[1] / common[0]);
    }
    return answer;
}

이 경우, 0항 1 항 2항을 이용해서 등차수열인지 확인하고, 등차수열이라면 마지막 항에서 공차를 더하는 형태로 작성하고, 

등비수열이라면 마지막 항에서 등비를 곱하는 형태로 작성하였다. 

이게 훨씬 깔끔하고 보기 편한것 같다. 

 

  Comments,     Trackbacks