문제🎮
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제 입력: 110 출력: 99
예제 입력: 1 출력: 1
문제풀이방법
생각한 로직
1~99까지는 한수니까 100미만인 수와 100이상인 수로 분류해서 큰 틀을 짠다.
100이상의 수가 입력값으로 받아진다면, 입력값으로 들어오는 수를 str을 이용해 분리한 다음에 각 수의 차가 등차수열인지 구분하는 조건문만 추가하면 된다.
n = int(input())
hansu = 0
for i in range(1, n + 1):
if i < 100:
hansu += 1
else:
lst = list(map(int, str(i)))
if lst[0] - lst[1] == lst[1] - lst[2]: #두번째 수와 첫번째 수의 차가 세번째 수와 두번째 수의 차와 같으면
hansu += 1 #각 자리가 등차수열이면 한수니까 +1
print(hansu)
1부터 num까지의 숫자 범위를 만든다.
숫자는 문자열로 변환시켜서 각각의 자릿수 숫자를 분리하고 map 함수를 사용하여 다시 int 타입으로 형변환을 한다.
1~99는 모두 한수니까, 변수 i가 100보다 작은 경우 모두 hansu라는 변수에 숫자를 더하도록 했고 변수 i가 100 이상인 경우는 세자리 숫자니까 각 자리가 등차수열을 나타내는지 확인해보고, 등차수열이면 한수니까 +1 해서 한수의 개수를 출력한다.
같은 방법으로 함수를 정의해서 푼 경우
def hansu(num) :
cnt = 0
for i in range(1, num+1):
lst = list(map(int,str(i)))
if i < 100:
cnt += 1
elif lst[0] - lst[1] == lst[1]- lst[2]:
cnt += 1
return cnt
num = int(input())
print(hansu(num))
'알고리즘 > 문제 풀이' 카테고리의 다른 글
1012번 유기농 배추 (0) | 2022.05.03 |
---|---|
1120번 문자열 (0) | 2022.04.29 |
분할정복 알고리즘 + 문제풀이: 2630: 색종이 만들기, 1780: 종이의 개수 (0) | 2022.04.28 |
2164번 카드2 (0) | 2022.04.28 |
셀프 넘버 (0) | 2021.05.09 |