본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 1065 한수 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 9. 15.
728x90
반응형

BaekJoon 백준 1065 한수 문제는 어떤 양의 정수의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 구하는 문제로 브루트 포스 알고리즘 활용 문제이다. 난이도는 Silver 4이다.

 

BaekJoon 1065 한수 문제 정보

출처

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

알고리즘 분류

- 브루트 포스 알고리즘 (brute force algorithm)

난이도

- 실버 4 / Silver 4

 

한수 문제 요약

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

 

문제 풀이 과정

  1. 1부터 N까지 100 미만이면 무조건 한수이므로 카운트한다.
  2. 100 이상이면, 문자열로 바꾸고 0, 1 번째 인덱스 값의 차이를 구하여 저장한다.
  3. 나머지 인덱스의 값들끼리의 차이가 모두 같다면 한수이므로 카운트한다.
  4. 차이가 하나라도 다르면 한수가 아니므로 다음 수를 탐색한다.
  5. N까지 모두 검사 후 한수의 개수를 출력한다.

 

코드 및 설명
  • cnt - 한수의 개수
  • isHansu - 한수인지 아닌지 여부
  • diff - N의 1, 2 번째 자릿수의 차이
N = int(input())
cnt = 0
for i in range(1, N+1):
    # 100 미만(한, 두자리 수)은 무조건 한수
    if i < 100:
        cnt += 1
    # 100(세자리 수) 이상이면
    else:
        isHansu = True
        i = str(i)
        diff = int(i[0]) - int(i[1])
        for n in range(1, len(i)-1):
            if int(i[n]) - int(i[n+1]) != diff:
                isHansu = False
                break
        if isHansu:
            cnt += 1
print(cnt)

BaekJoon 백준 1065 한수 문제를 파이썬 python 브루트 포스 알고리즘으로 풀어보았다. 난이도는 Silver 실버 4이다. 

728x90
반응형

댓글