관리 메뉴

솜씨좋은장씨

[BaekJoon] 1065번 : 한수 (Python) 본문

Programming/코딩 1일 1문제

[BaekJoon] 1065번 : 한수 (Python)

솜씨좋은장씨 2021. 5. 25. 00:19
728x90
반응형

코딩 1일 1문제! 오늘의 문제는 백준의 한수입니다.

 

1065번: 한수

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

www.acmicpc.net

Solution

def get_hansu_num(N):
    if N < 100:
        hansu = N
    else:
        hansu = 99
        for i in range(100, N+1):
            num_list = list(map(int, str(i)))
            
            if num_list[0] - num_list[1] == num_list[1] - num_list[2]:
                hansu += 1
    return hansu

if __name__ == "__main__":
    input_num = int(input())
    
    print(get_hansu_num(input_num))

Solution 풀이

한수는 각 자리별 차이가 일정한 수를 한수라고 부릅니다.

예를 들어 321 의 경우

백의 자리 수와 십의 자리 수의 차이가 3-2 == 1

십의 자리 수와 일의 자리 수의 차이가 2-1 == 1

로 각 자리별 차이가 1로 일정하므로 한수이고

 

100의 경우

백의 자리 수와 십의 자리 수의 차이가 1-0 == 1

십의 자리 수와 일의 자리 수의 차이가 0-0 == 0

으로 각자리별 차이가 일정하지 않으므로 한수가 아닙니다.

 

이에 1부터 99까지는 모두 각 자리의 수의 차이가 1 또는 0으로 일정하므로 모두 한수입니다.

 

따라서 99이하의 수가 함수에 들어오면 바로 입력받은 N이 return 되도록 합니다.

100 이상일 경우에는 

숫자를 str로 변경한 다음 list로 바꾸어 각 자리수 별 숫자로 분할한 뒤 map을 활용해서 각 수를 int로 바꾸어줍니다.

그 다음 (백의 자리 수 - 십의 자리의 수) 와 (십의 자리 수 - 일의 자리의 수) 를 구해서

같을 경우에 99 다음부터 카운팅하면 됩니다.

 

그 다음에 카운팅한 수를 return 하면 끝!

 

SOMJANG/CODINGTEST_PRACTICE

1일 1문제 since 2020.02.07. Contribute to SOMJANG/CODINGTEST_PRACTICE development by creating an account on GitHub.

github.com

Comments