파이썬 알고리즘 088 | [백준 1065] 한수

Yunny.Log ·2021년 1월 30일
0

Algorithm

목록 보기
91/318
post-thumbnail

88. 한수

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

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

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

예제 입력 1
110
예제 출력 1
99
예제 입력 2
1
예제 출력 2
1

<내 풀이>


def han(n):
    global cnt
    cnt=0
    for i in range(1,n+1) :
        if i<100:
            cnt+=1
        else:
            a=list(map(int,str(i)))
            if len(a)==4:
                if a[3]-a[2]==a[2]-a[1]==a[1]-a[0]:
                    cnt+=1
            elif len(a)==3:
                if a[2]-a[1]==a[1]-a[0]:
                    cnt+=1

if __name__=="__main__" :
    n=int(input())
    han(n)
    print(cnt)

<다른분의 풀이>


def check(n):
    if n < 100:
        return True
    
    a = int(str(n)[0]) - int(str(n)[1])
    for i in range(len(str(n))-1):
        if int(str(n)[i]) - int(str(n)[i+1]) != a:
            return False
    return True

n = int(input())
answer = 0

for i in range(1,n+1):
    if check(i):
        answer += 1

print(answer)

<반성점>

  • 나는 딱 문제에 맞게만 1000자리 이내의 숫자까지만 식별 가능하게 만든거구 다른 분은 어떤 자리가 나오든 등차수열 따질 수 있게 만드심

<배운 점>

  • 함수가 t/f 출력하게 해서 if(함수가 참이라면) 갯수 갱신하는 접근법도 有

0개의 댓글