한수(1065)
X가 한수인지 판별하는 함수를 정의하여 문제를 해결해 봅시다
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
일단 적어도 3자리가 나와야 수열을 이룰 수 있다는 점
등차수열을 일반 항으로 나타내면
a1 = a2 + (n-1)d
자리수계산
백의 자리수 : i / 100
십의 자리수 : (i/10)%10
일의 자리수 : i % 10
=>각 자리수를 찾는 방법
일의 자리수 : i%10
십의 자리수 : i/10%10
백의 자리수 : i/100%10
천의 자리수 : i/1000%10
...
n의 자리수 : i/n의 자리위치%10
위에서 계산한 자리수 끼리의 차이가 같으면 등차수열이라는 점
2번째 시도
생각보다 고생을 했지만 -> 잘생각해보면 어짜피 1의 자리수(1~9)와 2의 자리수는 계산할 의미가 없다..! 일정한 차이를 확인하기 위해서는 적어도 자리수가 3자리는 되어야 비교를 할 수 있기 때문이다
그래서 기본적으로 100보다 작을 때(1의 자리이거나 2의 자리일때)는 그 숫자가 총 한수의 수가 되는 것이다.
실제로 맨 처음 예시를 준것도 110을 주고 결과값이 99가 나오는 것을 보여주는데, 여기서 2가지를 알 수 있었다.
한자리 숫자와 두자리 숫자에 대한 처리를 어떻게 해줘야 하는지
등차수열을 계산하기 위해서는 뒤의 자리 숫자에서 앞자리 숫자를 빼준 차이를 가지고 계산
1번 부분은 자꾸 원하지않는 숫자가 나오고 있어서 찾기 어려웠고 2번은 차이이기 때문에 당연히 Math.abs을 이용하고 있었지만 그럴필요가 없었다는거..! 위의 2가지를 찾고나서는 문제풀기 쉬웠다.
Last updated
Was this helpful?