[백준]1065번 한수 - 완전 탐색
SW개발/코딩테스트

[백준]1065번 한수 - 완전 탐색

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

 

 

n = int(input())
han = 0

for i in range(1, n + 1):
    if i < 100:  # 두자리수는 모두 등차수열, 즉 한수임
        han += 1
    else:  # 세자리수라면
        check = list(map(int, str(i)))  # 리스트에 각 숫자를 저장
        if check[1] - check[0] == check[2] - check[1]:  # 각 자리의 차이가 같다면, 한수라면
            han += 1
print(han)

 

코드 설명

두자리수까지는 모두 등차수열을 이룬다 따라서 100 미만은 전부 카운트를 해준다. 세자리수가 될때는 숫자를 분해하기 위해 문자열로 바꾼 값을 다시 Int 로 바꾸면서 리스트에 저장한다. 세자리수가 최대이기 때문에 첫번째와 두번째자리, 세번째와 두번째 자리의 차이가 같다면 한수가 되므로 카운트를 해준다. 이때 1000의 경우에는 한수가 될 수 없으므로 고려하지 않아도 된다. (등장하는 최대값은 1000 이다)

 

Point : 두자리수까지는 모두 한수이다. 세자리수부터 각 자리의 차이가 같을 시에만 카운트를 해준다.

728x90