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 같은 수학 함수가 항상 통하는 건 아님
댓글
첫 번째 댓글을 남겨보세요.