백준 1731번: 추론

최창효·2022년 1월 9일
0
post-thumbnail


문제 설명

  • 입력으로 들어오는 숫자들이 등차수열인지 등비수열인지 판단하는 문제입니다.

접근법

  • 연속된 3개의 숫자 [A,B,C]에 대해 B-A == C-B가 성립하면 등차수열, B/A == C/B가 성립하면 등비수열 입니다.

정답

N = int(input()) #수열의 길이를 변수 N에 담습니다
lst = []
for _ in range(N): #수열의 길이만큼 반복하면서
    lst.append(int(input())) #수열의 값을 lst라는 배열에 넣습니다
    
    
if lst[1]-lst[0] == lst[2]-lst[1]: #각 항의 차이가 동일하면
    d = lst[2]-lst[1] #공차가 d인 등차수열입니다
    print(lst[-1] + d)
elif lst[2]/lst[1] == lst[1]/lst[0]: # 각 항의 비율이 동일하면 등비수열입니다
	r = int(lst[1]/lst[0]) # 실수형을 정수형으로 변환하기 위해 int()를 사용합니다  
    print(lst[-1]*r)

기타

  • Q의 조건이 없는 상황에서 공비(r)을 정수형(int)으로 선언해도 괜찮은가?
    • Q의 조건은 없지만 입력되는 모든 원소는 자연수라는 명시가 있습니다.
    • 공비가 실수면 입력되는 모든 원소가 자연수일 수 없기 때문에 공비는 정수입니다.
  • 최초 3개의 항으로 등차 또는 등비를 판별할 수 없는 경우는 없는가?
    • 만약 [A,B,C,...]인 수열에서 C-B = B-A이면서 동시에C/B == B/A라면?
      • CB=BAC-B = B-A --> 2B=A+C2B = A+C --> 1]B=(A+C)/2B = (A+C)/2
      • C/B=B/AC/B = B/A --> 2]B2=ABB^2= AB
      • by 1],2] ((A+C)2)/4=AB((A+C)^2)/4 = AB --> (A+C)2=4AB(A+C)^2 = 4AB --> (AC)2=0(A-C)^2 = 0
        • A=C인 값은 해당 경우가 발생할 수 있다. A=C이면서 등차 또는 등비수열을 유지하려면 BA,C와 같은 값이여야 한다.
        • [A,A,A,...A]인 수열은 등차가0인 등차수열이면서 동시에 등비가1인 등비수열이다.
        • 등차로 풀든 등비로 풀든 동일한 정답을 얻을 수 있기 때문에 고려할 필요가 없다.
profile
기록하고 정리하는 걸 좋아하는 개발자.

0개의 댓글

관련 채용 정보