[BOJ] - 1065

byhazy·2021년 7월 11일
0

algorithm 풀이

목록 보기
42/44

문제 1065번

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

입력

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

출력

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

코드

n = int(input())

num = 0
for i in range(1,n+1): #n+1를 한이유는 n이 1000이면 1부터 999까지 돌기때문
    if i < 100: #100보다 작은 수일때는 비교수가 없기 때문에 무조건 등차수열인 한수.
        num += 1
    
    elif (i//100 - i%100//10) == (i%100//10 - i%10): # 함수로 빼면 더 좋음.  
        num += 1    
    
print(num)

설명

  • 등차수열: 연속된 두 개의 수의 차이가 일정한 수열
  • 한수: 숫자 n이 주어졌을 때 각 자리수가 등차수열을 이룬다면 한수
    즉, 1부터 1000의 수 중에서 100보다 작은 수들은 비교할수가 없고 무조건 등차수열이라서 한수.
  1. 100보다 작은 수는 다 한수로 카운트

  2. 100자리수- 10자리수 == 10자리수 - 1의자리수가 같을 때를 이용해 한수 개수를 구함. 이때 나머지 연산자(//)와 몫 연산자(%)를 이용해서 구함.

  3. 처음에 저 한수 개념이 이해가 안가고, 숫자를 str로 풀려고해서 너무 어려움을 겪음,,

  4. n+1를 한이유는 n이 1000이면 1부터 999까지 돌기때문이다.

0개의 댓글