Python 알고리즘 - 한수

Code_Alpacat·2022년 1월 12일
0

Python 알고리즘

목록 보기
15/15

한수

  • 한수란 각 자리의 수들이 등차수열을 이루는 수를 칭한다.
  • 이전 문제에서 영감을 얻어 문자 단위로 수를 나눠서 푸는게 효율적일 것 같다.

1. 1000보다 작거나 같은 수 N을 입력받는다.

2. 1<=x<=N을 만족하는 한수의 개수를 출력한다.

3. 나는 완전탐색으로

  • 1부터 9까지는 count,
  • 10, 11을 제외한 12~19
  • 23~29
  • 34~39
    ....

10의 자릿수 까지는 1의 자릿수가 같거나 작지만 않아도 무조건 한수이다.

  • 100의 자릿수부터는 공차가 증가할수록 한수가 적어진다.
  • 123, 135, 147, 159 뿐이다.

정답.

  • 처음에 문제를 확실히 이해했어야했다. 등차수열의 공차가 음수나 0도 될 수 있다는 것을 간과했다. 그랬다면 2번째 코드 처럼 풀 수 있었다.
# 한수구하기

N = int(input())
count = 0
# 1~10까지는 count + 1
for i in range(1, N+1):

    if i in range(1, 10):
        count += 1

# 두 자릿수는 각 자릿수가 같거나 10의 자릿수가 더 크면 안됨.
    elif i in range(10, 100):
            count += 1
        
        
#세 자릿수는 각 자릿수의 차가 일정해야함.
    elif N in range(100, 1001):
        if abs((i//10)%10 - (i//100)%10) == abs(i%10 - (i//10)%10):
            if ((i//10)%10 > (i//100)%10) and i%10 > (i//10)%10:
                count +=1
            elif ((i//10)%10 < (i//100)%10) and i%10 < (i//10)%10:
                count +=1
            
            elif ((i//10)%10 == (i//100)%10) and i%10 == (i//10)%10:
                if i != 1000:
                    count +=1
                else:
                    pass
            else:
                pass
        else:
            pass
    
    else:
        pass



print(count)

더 쉽게 가능하다.

num = int(input())

hansu = 0
for i in range(1, num+1):
    num_list = list(map(int, str(i)))
    if i < 100:
        hansu += 1  # 100보다 작으면 모두 한수
    elif num_list[0]-num_list[1] == num_list[1]-num_list[2]:
        hansu += 1  # x의 각 자리가 등차수열이면 한수
print(hansu)
profile
In the future, I'm never gonna regret, cuz I've been trying my best for every single moment.

0개의 댓글