본문 바로가기

개발 공부/알고리즘

[Python] 백준 1065번 한수 풀이

백준 1065번 한수 구하기 문제를 파이썬으로 풀어보자

 

 

 

가장 처음 아무것도 검색안하고 타이핑만 친 코드

 

import sys

# X가 한수인지 체크하는 함수
def is_hansu(a):
  a_list = list(map(int, str(a)))
  for i in a_list:
    if a_list[i+1]-a_list[i] == a_list[i+2]-a_list[i+1]:
      continue
    return 1


n = int(sys.stdin.readline())

count = 0

for j in range(n):
  if is_hansu(j) == 1:
    count += 1

 

 

내가 놓친 부분

 

1. 입력한 숫자가 1자리나 2자리수일 때는 무조건 등차수열  > 입력값에 주의하자

2. 어차피 등차수열에서 "차"는 항상 같기 때문에 먼저 선언하고 비교하면 쉬움

3. for문 안에 if문을 쓸 때는 if문에서 같은 걸 찾았을 때 멈출 건지, 다른 걸 찾았을 때 멈출건지 먼저 생각해야 함

4. for문을 돌릴 때는 n번째인지, n+1, n-1 번째인지 정확히 마지막 값까지 고려해야 함 (당연한데 ㅠ..)

 

최종 코드

import sys

def is_hansu(a):
  a_list = list(map(int, str(a)))
  if len(a_list) <= 2:
    return True
  diff = a_list[1] - a_list[0]
  for i in range(1, len(a_list) - 1):
    if a_list[i+1]-a_list[i] != diff:
      return False
  return True

n = int(sys.stdin.readline())

count = 0

for j in range(1, n+1):
  if is_hansu(j):
    count += 1

print(count)