알고리즘/브루트포스
백준 1065 한수
한뜽규
2024. 1. 15. 15:53
728x90
https://www.acmicpc.net/problem/1065
1065번: 한수
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나
www.acmicpc.net
가장 먼저 생각해본 부분은 100미만의 수이다.
만약 0~9라면 무조건 비교할 수가 없기에 무조건 한수가 될 것이다.
만약 10~99라면 수가 2개 밖에 되지 않기 때문에 무조건 한수가 될 것이다.
그렇기 때문에 해당 수들은 모두 한수로 처리를 해주고 들어가야 한다.
def hansoo(num):
hansoo_list = []
while num > 0:
hansoo_list.append(num % 10)
num //= 10
for t in range(len(hansoo_list) - 2):
if hansoo_list[t+1] - hansoo_list[t] != hansoo_list[t+2] - hansoo_list[t+1]:
return False
return True
우선 해당 수가 한수인지 판별해주는 함수이다.
만약 100 미만의 수가 들어오면 배열의 크기가 2 이하가 되기 때문에 무조건 True가 반환되게 된다.
100 이상의 수가 들어오게 된다면, 해당 수를 모두 쪼개서 배열에 저장한다.
그리고 반복문을 통해 간격이 다른 구간이 있다면 바로 False를 반환한다.
import sys
N = int(sys.stdin.readline())
result = 0
def hansoo(num):
hansoo_list = []
while num > 0:
hansoo_list.append(num % 10)
num //= 10
for t in range(len(hansoo_list) - 2):
if hansoo_list[t+1] - hansoo_list[t] != hansoo_list[t+2] - hansoo_list[t+1]:
return False
return True
for i in range(1, N + 1):
if hansoo(i):
result += 1
print(result)
이렇게 전체 코드이다.
입력한 수에 따라 반복문으로 한수의 개수를 찾아서 출력하게 된다.