[Brute force] 백준 1065번 한수 - 파이썬(Python)

업데이트:

개요

png

source : 백준 1065번

문제

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

입력

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

출력

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

예제 입력과 출력

  • 예제 1
# 입력
110
# 출력
99
  • 예제 2
# 입력
1
# 출력
1
  • 예제 3
# 입력
210
# 출력
105
  • 예제 4
# 입력
1000
# 출력
144
  • 예제 5
# 입력
500
# 출력
119


풀이

아이디어

  • 1~99는 무조건 등차수열
  • 1000인 경우는 등차수열이 아님
  • 100~999는 연속된 수의 차이 값을 set 자료구조에 저장하고 1인 경우만 등차수열로 판단

코드

# solve
N=int(input())
cnt=0
for i in range(1,N+1):
    if i > 99:
        i=100
        num = list(map(int,str(i)))
        st_ = set()
        for j in range(len(num)-1):
            st_.add(num[j+1]-num[j])
        if len(st_)==1:
            cnt+=1
    else:
        cnt+=1
print(cnt)
# reference 나머지를 이용한 방법
def Hansu(N):
    cnt=0
    if N<100:
        return N
    else:
        for i in range(100,N+1):
            n100 = i//100       # 100의 자릿 수
            n10 = (i%100)//10   # 10의 자릿수
            n1 = i%10           # 1의 자릿수
            if (n100-n10)==(n10-n1):
                cnt+=1
        return 99+cnt
Hansu(int(input()))

메모

  • 등차수열에 대한 이해가 필요했음 (1~2자리 숫자는 등차수열로 판단)
  • 100~999는 비교군이 두개 밖에 없음 (첫째와 둘째, 둘째와 셋째)
  • 몫과 나머지를 이용하여 자릿수를 구할 수 있음


Reference

https://wjunsea.tistory.com/39

댓글남기기