STUDY/Algorithm

[백준] 1065 한수

sinawi95 2021. 1. 30. 03:50
728x90
# 첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
# 첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.

def ishansu(str_number):
    # 한, 두자리 수인 경우 무조건 등차수열
    if len(str_number)== 1 or len(str_number)==2:
        return True

    # 세자리 수인 경우
    tmp = []
    for ch in str_number:
        tmp.append(int(ch))
    if (tmp[0]-tmp[1]) == (tmp[1]-tmp[2]):#  각 자리가 등차수열?
        return True
    else:
        return False


N = int(input())
result = 0
for i in range(1, N+1):
    if ishansu(str(i)):
        result += 1
print(result)

 

함수를 지정하여 한수인지 아닌지 체크했다. 

함수를 보면 입력값을 string으로 받았는데, string은 각 자리수를 쉽게 나눌수 있기때문이다

그리고 한, 두 자리수의 숫자는 등차인지 비교를 못하기 때문에 True로 반환을 했다.(예제. 입력 1일때 출력 1 => True)

세자리 수인 경우에만 등차인지 판단을 하면 되는데 각 자리수를 int로 변환해서 tmp에 추가를 했고 각 자리수들의 차이를 비교했다.

결과는 68ms

 

    # 세자리 수인 경우
    if (int(str_number[0])-int(str_number[1])) == (int(str_number[1])-int(str_number[2])):#  각 자리가 등차수열?
        return True
    else:
        return False

비교하는 코드는 이렇게도 바꿀수 있는데 이 경우에는 시간이 조금더 오래걸렸다. 76ms