http://acmicpc.net/problem/1065
{코드}
n = int(input())
if n < 100:
print(n)
else:
cnt = 99
for i in range(100, n+1):
d = tuple(map(int, str(i)))
if d[0]-d[1] == d[1]-d[2]:
cnt += 1
print(cnt)
{설명}
이 문제는 등차수열인지 아닌지를 판별하는 문제입니다.
이때 몇 가지 방법을 통해 코드를 줄일 수 있는데 만약 N이 100보다 작다면 무조건 등차수열이므로 바로 N을 출력하면 됩니다.
또한 1000은 등차 수열이 될 수 없습니다.
그러면 결국 N보다 같거나 작은 세 자리 숫자들만 등차수열의 여부를 판별하면 됩니다.
판별 방법은 (백의 자릿수)-(십의 자릿수) == (십의 자릿수)-(일의 자릿수) 라면 등차수열입니다.
그러므로 N이 백보다 작다면 N, 백보다 크다면 99(백보다 작은 자연수의 개수) + 등차수열인 N이후의 세 자릿수가 됩니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 11720번-파이썬/Python] 숫자의 합 (0) | 2020.10.13 |
---|---|
[백준 11654번-파이썬/Python] 아스키코드 (0) | 2020.10.12 |
[백준 4673번-파이썬/Python] 셀프 넘버 (0) | 2020.10.10 |
[백준 15596번-파이썬/Python] 정수 N개의 합 (0) | 2020.10.06 |
[백준 4344번-파이썬/Python] 평균은 넘겠지 (0) | 2020.10.06 |