본문 바로가기
코딩공부/백준 (python)

[백준 1065] 한수 (Python)

by CodingKwon 2022. 3. 1.

문제 링크

https://www.acmicpc.net/problem/1065

 

1065번: 한수

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

www.acmicpc.net

 

나의 코드 (Python)

# 한수 체크
def check(num):
    cnt = 0     # 카운팅 변수
    
    for i in range(1, num+1):
        res = list(map(int, str(i)))  # 각 자리를 리스트로 저장
        res_len = len(res)  # 입력값이 몇 자리 수인지 판단

        # 1000은 한수가 될 수 없음
        # 세 자릿수는 값을 비교함
        # 두 자릿수는 무조건 한수가 됨
        # 한 자릿수는 한수

        if res_len == 3:    # 세 자릿수 각 자리 비교
            if res[0] - res[1] == res[1] - res[2]:
                cnt += 1
        elif res_len <= 2:  # 두 자릿수 이하
            cnt += 1

    return cnt


n = int(input())    # 입력
print(check(n))    # 한수의 개수 출력

 

한수는 각 자리의 수가 등차수열인 수입니다.

입력값은 1~1000 사이기 때문에 3가지 경우가 발생합니다.

 

1000 : 한수가 될 수 없음

999~100 : 각 자리를 비교해서 한수인지 파악

99~1 : 무조건 한수가 됨

 

따라서 이를 비교하기 위해 주어진 값보다 작은 모든 값을 찾아야 하기 때문에 for문을 사용하여 1~주어진 값까지 모든 수를 체크합니다.

수를 각 자리로 분해하는 식은 res = list(map(int, str(i))) 입니다. 이는 str를 사용해 자리를 문자열로 분해한 값을 map()을 통해 int형으로 바꿔서 list에 저장하는 방법입니다.

 

이제 이 배열의 수가 몇 개인지에 따른 if문을 사용하면 됩니다. list안의 개수는 len() 함수를 이용하여 구할 수 있습니다.

 

댓글