본문 바로가기

백준 문풀

백준 문제풀이_1065번(한수/등차수열)

 

>>문제

 

>>예제 입출력

 

 

>>idea

 

위 문제를 풀이하기 위해선

등차수열에 대한 정의를 명확하게 이해할 필요가 있음

 

>> 수열과 등차수열의 정의

수열 : 수의 나열

등차수열 = 나열된 각 수의 차이가 같음(등차)

 

point1) 두 자리 숫자까지는 모두 등차수열이다.

 

-한 자리 숫자 => 나열된 수가 하나인 수열(초항)

ex) 입력값 : 1 => 초항이 1인 등차수열

 

-두자리 숫자 => 나열된 수가 두개인 등차수열(초항 / 초항+공차)

ex) 입력값 : 14 =>  1  --- 4 [초항이 1이고 공차가 3인 등차수열]

 

결론 : 두자리 숫자까지는 모두 등차수열

=> 만약 입력값인 n이 두자리 숫자라면 1부터 n까지 모두 등차수열이므로 출력값도 n


 

point2) 세자리 숫자에서 어떻게 각 숫자를 분리할 것인가?

예를 들어 123이 주어졌다면, 이것을 각각 1,2,3으로 어떻게 나눌까?

 

방법1. divmod 나눗셈 활용(비추천)

 

divmod(x,y) => (a,b)

a = x/y의 몫을 반환함

b= x/y의 나머지를 반환함

 

이런것처럼

number = 123이라면

divmod(123,10) => (12,3)

divmod(12,10)=> (1,2)

divmod(1,10) => (0,1)

로 각각 1,2,3을 리스트에 담아 분리 가능

 

=> 그러나 위 방식은 반복문 코드를 짜주어야함.

=> but, 각 숫자를 여러번 쓸 것이라면 리스트에 담아두는 것도 괜찮

 

 

방법2. 숫자를 문자열로 바꾸어 인덱싱

 

=> 자리수를 알고 있기에 가능

 

 


point3 . 등차수열을 어떻게 판단할 것인가?

 

a,b,c가 등차 수열을 이룰 때 => 2b = a+c를 활용

 

예1)

n = 123일 때

2*2 = 1+3 => 등차수열

 

예2)

n=134일 때

3*2 = 1+4 => 등차수열 아님

 


>> 나의 정답