본문 바로가기
알고리즘/백준 solved.ac PS

[백준][solved.ac][Silver 4][Python] 1065번 : 한수

by 빛밤하늘 2021. 5. 9.
반응형

밑의 링크는 백준에서의 문제 링크입니다.

 

1065번: 한수

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

www.acmicpc.net

 

 

 

 

 

 

 

파이썬 코드와 결과입니다.

# 첫째 줄에 1,000보다 작거나 같은 자연수 N을 입력합니다.
N = int(input())

# N이 100 미만이라면
if N < 100:
    # 100 미만의 숫자들은 모두 한수에 속하므로 N을 그대로 출력해줍니다.
    print(N)
# N이 100 이상이라면
else:
    # 한수의 개수를 저장할 변수를 선언합니다.
    # 100 미만의 숫자들은 모두 한수에 속하므로 99로 초기화해줍니다.
    han_num_count = 99

    # 100부터 N까지 반복해봅니다.
    for number in range(100, N + 1):
        # 현재 숫자를 문자열 형태로 변환하고 저장하는 변수를 선언합니다.
        str_num = str(number)
        # 현재 숫자의 길이를 저장하는 변수를 선언합니다.
        num_len = len(str_num)
        # 현재 숫자의 맨 앞자리와 맨 뒷자리 숫자의 차이를 공차로 저장하는 변수를 선언합니다.
        common_difference = int(str_num[1]) - int(str_num[0])
        # 현재 숫자가 한수인지 여부를 저장하는 변수를 선언합니다.
        # 한수가 맞다는 뜻인 True로 초기화합니다.
        is_han = True

        # 현재 숫자의 두 번째 숫자부터 뒤에서 두 번째 숫자까지 반복해봅니다.
        for index in range(1, num_len - 1):
            # 현재 자리의 숫자 - 다음 자리의 숫자가 공차와 같지 않다면
            if int(str_num[index + 1]) - int(str_num[index]) != common_difference:
                # 현재 숫자는 한수가 아니므로 is_han의 값을 False로 변경합니다.
                is_han = False
                # 반복문을 탈출합니다.
                break

        # 현재 숫자가 한수라면
        if is_han:
            # 한수의 개수에 1을 더해줍니다.
            han_num_count += 1

    # 한수의 개수를 출력합니다.
    print(han_num_count)

결과

 

제출하고 나서 다른 사람들의 파이썬 결과를 보니 제가 제출한 코드의 실행 시간보다 빠른 결과들이 많았습니다.

저는 반복문의 깊이가 2가 되는 코드인데

어떤 분의 코드를 보니 반복문을 하나만 써서 결과를 만든 것이 있었습니다.

실행 시간을 줄이려면 반복문의 중첩을 줄여야한다고 책에서 봤었는데

스스로 반복문이 1개인 코드를 생각해보고

영 답이 안 나오면 다른 사람들의 코드를 보고 더 열심히 공부해봐야겠습니다.

 

 

 

※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.

※ 더 효율적이고 빠른 정답을 환영합니다.

반응형

댓글