Love Every Moment

〔백준/파이썬〕1065번 한수 본문

PROGRAMMING::LANGUAGE/Python

〔백준/파이썬〕1065번 한수

해 송 2022. 6. 23. 22:06
반응형

 

출처

 

1065번: 한수

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나

www.acmicpc.net

 


 

문제

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. 

첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다. 

첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하라.

 


 

예제

# 입력
110
# 출력
99

 


 

풀이 - (1)

import sys
num = int(input())

# 1~99 까지는 전부 한수이므로 받은 숫자 그대로 출력
if num <= 99 :
	print(num)
	sys.exit()

# 100 이상의 숫자가 입력된 경우 등차수열 여부 확인
cnt = num
for i in range(100, num + 1) :
	string = str(i)
	diff_first = int(string[1]) - int(string[0])
	for j in range(1, len(string) - 1) :
		diff_now = int(string[j + 1]) - int(string[j])
		if diff_now != diff_first :
			cnt -= 1
			break
print(cnt)
  • 어차피 문제에서 1,000 보다 작거나 같은 자연수 N이 주어진다고 했기 때문에 굳이 이렇게 안 하고 아래 풀이처럼 첫번째와 두번째 차이만 비교해도 상관 없다
  • 100 미만의 숫자는 전부 한수이므로 100 미만의 숫자가 입력되면 그대로 출력 후 종료하게 했다

 

 

풀이 - (2)

num = int(input())

# 한수의 개수
cnt = 0
for i in range(1, num + 1) :
	# 100 미만의 수는 전부 한수
	if i < 100 :
		cnt += 1
	else :
		num_list = list(map(int, str(i)))
		if num_list[0] - num_list[1] == num_list[1] - num_list[2] :
			cnt += 1	
print(cnt)
  • 1~99 사이의 수라면 한수의 개수를 +1 증가
  • 100 이상의 수라면 (백의 자리수 - 십의 자리수) 와 (십의 자리수 - 일의 자리수) 가 같은지 확인하여 한수의 개수 증가

 

반응형
Comments