[js] 다음에 올 숫자

sookyoung.k·2024년 6월 26일
1
post-thumbnail

등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요.

제한사항

  • 2 < common의 길이 < 1,000
  • -1,000 < common의 원소 < 2,000
    • common의 원소는 모두 정수입니다.
  • 등차수열 혹은 등비수열이 아닌 경우는 없습니다.
  • 등비수열인 경우 공비는 0이 아닌 정수입니다.

나의 풀이

function solution(common) {
    let diff1 = common[1] - common[0];
    let diff2 = common[2] - common[1];
    
    let ratio = common[1] / common[0]

    return diff1 === diff2 ? common.at(-1) + diff1 : common.at(-1) * ratio; 
}

첨엔 등차수열만 있는 줄 알고 개쌉쉽네! 하고 풀었다가 틀려벌임... 다시보니 등비수열도 있음 문제를 잘 읽자

  1. diff1diff2는 common 배열의 0과 1의 차, 1과 2의 차이다.
  2. 만일 두 값이 동일하다면 이는 등차수열이다. 따라서 common 배열의 마지막 원소(common.at(-1))을 불러와 diff1을 더해준다.
  3. 동일하지 않다면 등비수열임을 의미한다. 때문에 공비(ratio)를 구해서 마지막 원소에서 곱해준다.

다른 풀이 1

function solution(common) {
    if ((common[1]-common[0])==(common[2]-common[1])){
        return common.pop() + common[1] - common[0];
    }
    else{
        return common.pop()*common[1]/common[0];
    }
}
  1. if 조건으로 등차수열인지 아닌지(등비수열)를 구분한다.
  2. 등차수열일 경우 pop() 메서드로 마지막 원소를 가져온 다음 등차를 구하여 더해준다.
  3. 등비수열일 경우 똑같이 마지막 원소를 가져온 후 등비를 구하여 곱해준다.

다른 풀이 2

const solution = c => c[1]-c[0] === c[2]-c[1] ? c[c.length-1] + c[1] - c[0] : c[c.length-1] * c[1] / c[0]

삼항연산자를 사용했지만 결국 다 같은 내용이다!

profile
영차영차 😎

0개의 댓글