PARA/03_Resources/R001_개발_레퍼런스(참고문서)/알고리즘/알고리즘 - 다음에 올 숫자.md

알고리즘 - 다음에 올 숫자

import math
def solution(common):
    a = common[-1] - common[-2]
    b = common[1] - common[0]
    
    # 등차수열이면
    if(a == b):
        return common[-1] + a
    # 등비수열이면
    else:
        ratio = common[1] // common[0]
        return common[-1] * ratio
  • 내가 푼 답은 위와 같음.

논리 전개 과정

  • 등차수열인지 등비수열인지 어떻게 판단하지?
  • 연속된 두 항의 차이를 비교해보자
    • 앞쪽 차이 b = common[1] - common[0]
    • 뒷쪽 차이 a = common[-1] - common[-2]
  • 두 차이가 같으면 등차수열, 다르면 등비수열

포인트

  • 등차수열 vs 등비수열 판별
    • 처음에 첫 두 항의 차이만 보고 판단하려 했는데, 앞뒤 차이를 비교하는 게 더 확실함
  • 등비수열에서 공비 구하는 방법
    • 처음에 b = common[1] - common[0] (차이)를 그대로 사용했는데 틀렸음
    • 등비수열은 나눗셈으로 공비를 구해야 함
      • ratio = common[1] // common[0]
  • GCD로 해결하려고 했는데 실패
    • GCD는 등비수열의 공비와 무관함
    • gcd(1, 2) = 1이지만 공비는 2
    • gcd(2, 4) = 2이고 공비도 2라서 우연히 맞을 수 있지만 일반적이지 않음

더 간단한 방법

def solution(common):
    # 등차수열 확인: 처음 세 항으로 판단
    if common[1] - common[0] == common[2] - common[1]:
        return common[-1] + (common[1] - common[0])
    else:
        return common[-1] * (common[1] // common[0])
  • 처음 세 항만으로 판별 가능
    • 등차수열: common[2] - common[1] == common[1] - common[0]
    • 공차를 한 번만 계산하면 됨

최종 정리

  • 수열 문제 접근법
    • 등차수열: 차이(덧셈/뺄셈)
    • 등비수열: 비율(곱셈/나눗셈)
  • 미리 알고 있어야 하는 것
    • 등차수열: 공차 = 다음항 - 현재항
    • 등비수열: 공비 = 다음항 / 현재항
  • 실수하기 쉬운 포인트
    • 등비수열에서 차이를 사용하면 안 됨 (비율을 사용해야 함)
    • GCD 같은 수학 함수가 항상 통하는 건 아님

댓글

첫 번째 댓글을 남겨보세요.