[프로그래머스] Lv0_다음에 올 숫자

박선영·2023년 10월 10일
0
post-thumbnail

Lv0_다음에 올 숫자

📄Description

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

제한 조건

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

입출력 예시

commonresult
[1, 2, 3, 4]5
[2, 4, 8]16

입출력 예 설명

  1. [1, 2, 3, 4]는 공차가 1인 등차수열이므로 다음에 올 수는 5이다.
  2. [2, 4, 8]은 공비가 2인 등비수열이므로 다음에 올 수는 16이다.

🤔생각 정리

  1. 등차수열인지 등비수열인지 알아야겠네.
    • 초항과 두 번째 항으로 공차, 공비를 계산해서 마지막 항의 결과와 같은지를 계산해서 구해야겠어.
    • 초항이 0이면 공비를 구할 수 없으니까 등차조건으로 구분해야겠네.
  2. 마지막 항의 값을 사용해서 결과값을 계산하면 되겠네.

💡Pseudo Code💡

1. a0, a1 = 초항과 두 번재 항
2. d = 공차
3. a0 == 0 or 마지막 항 == a0 + (n-1)*d 이면 등차수열:
4.		return 마지막 항 + d
5. return 마지막 항 * 공비(a1//a0) # 등비수열

🖥️코드화

def solution(common):
    a0, a1, an = common[0], common[1], common[-1]
    d = a1-a0 # 공차
    if an == (a0 + (len(common)-1) * d):
        return an + d #등차수열
    return an * (a1//a0) #등비수열

📌코드 비교 및 감상

  1. a0, a1, a2로 계산하기
    나는 마지막항을 활용하여 계산했는데 굳이 마지막 항이 아니더라도 세번째 항으로도 등차수열인지 등비수열인지 확인할 수 있다.
    코드를 인용하자면 이렇다.
def solution(common):
    a, b, c = common[:3]
    if (b-a) == (c-b):
        return common[-1] + (b-a)
    return common[-1] * (b//a)
profile
데이터를 만지는 사람

0개의 댓글