백준 1065번 - 한수 with Python
Q. 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
입력 > 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력 > 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
처음에 이 문제를 딱 읽었을 때 문제가 잘 이해가 안돼서 당황,,,
근데 뭔가 내 힘으로 풀어보고 싶어서 구글링 안하려고 하다가
문제에 대한 질문을 누가 백준 질문란에 올려서 이해할 수 있었다!
문제가 잘 이해가 되지 않는다면 요 아래 사이트를 참고하세요!!
https://www.acmicpc.net/board/view/25689
문제에서 말했듯이, 각 자리별로 숫자가 등차수열을 이루는 수를 찾아 개수를 세면 된다.
먼저 1~9까지의 자연수는 자리가 한 자리밖에 되지 않기 때문에 이는 등차수열을 이루는 수이다.
10~ 99까지의 자연수는 자리가 두 자리인데, 이 숫자도 무조건 등차수열을 이루게 된다.
그럼 우리가 고려해주어야할 수는 100~999까지의 수이다.
이 수가 등차수열인지 확인하려면
(세 번째 자리수)-(두 번째 자리수)와 (두 번째 자리수)-(첫 번째 자리수)의 값이 같으면 된다.
위의 내용을 종합해서 컴퓨팅적 사고를 해보자면
1~N까지의 숫자가 있을 때,
1~99까지의 수일 때에는 무조건 +1을 해주고,
100 ~ N까지의 수일 때에는
(세 번째 자리수)-(두 번째 자리수)와 (두 번째 자리수)-(첫 번째 자리수)의 값이 같으면 +1을 해준다.
그리고 이 개수를 다 세어준다.
이것은 for문과 if,elif문을 활용하여 나타내줄 수 있겠다.
코드는 아래와 같다.
N = int(input())
count = 0
i=1
for i in range(1,N+1):
k = list(map(int,str(i)))
if(i<=99):
count+=1
elif ((k[2]-k[1])==(k[1]-k[0])):
count+=1
print(count)
'우당탕탕 파이썬 with 하루하나 알고리즘' 카테고리의 다른 글
백준 10809 파이썬 - 알파벳의 위치를 찾아라! (0) | 2022.04.05 |
---|---|
백준 11654 파이썬 - 아스키코드(ASKII)로 문자 변환하기! (0) | 2022.04.04 |
백준 4673 파이썬 - 생성자가 아닌 셀프 넘버 출력하기! (0) | 2022.04.02 |
백준 15596 파이썬 - 함수 생성하기 (0) | 2022.04.01 |
백준 4344 파이썬 - 평균이 넘는 학생들의 비율 구하기! (0) | 2022.03.31 |