사실 이 문제는 2주일 전에 처음 접한 문제였다가 풀지를 못해서 2주뒤인 오늘 다시 보게 되었는데, 조금 고민하더니 풀이가 생각나서 한번에 풀 수 있게 되었다:
import sys
def one_num(x):
list_x = [int(i) for i in list(str(x))]
d = []
for i in range(len(list_x)-1):
d.append(list_x[i] - list_x[i+1])
d_set_list = list(set(d))
if len(d_set_list) > 1:
return False
else:
return True
N = int(sys.stdin.readline())
count = 0
for j in range(1, N+1):
if one_num(j):
count += 1
elif not one_num(j):
pass
print(count)
- def one_num(x)을 통해 한수를 구하는 함수를 만들어 준다.
- d라는 공차를 담는 빈 리스트를 만들어주고, x를 자릿수마다 정수로 담은 리스트를 list_x로 정의한다.
- d_set_list 라는 리스트는, 공차 리스트인 d를 set로 만들어주고, 이 set를 다시 리스트로 만든것으로 정의한다.
- 따라서 이 d_set_list의 길이가 1보다 크다면, 그 뜻은 각 주어진 숫자의 각 자릿수들의 공차가 일정하지 않다는 뜻이므로, 한수가 아니다. 만약 d_set_list의 길이가 1과 같다면, 자릿수들의 공차가 일정하다는 뜻이므로, 한수로 정의될 수 있다
- 마지막으로, 1부터 N까지의 숫자들을 각각 한수인지 확인해주고, 한수가 맞다면 이를 count에 1을 더해준다.
- 마지막으로 count를 출력해준다면 1 이상 N 이하의 숫자들 중에 한수의 개수를 확인할 수 있다.
'알고리즘 테스트 > 백준 문제풀이 및 해설' 카테고리의 다른 글
<백준 문제풀이: 1712번> 파이썬 - 손익분기점 (0) | 2020.11.24 |
---|---|
<백준 문제풀이: 2941번> 파이썬 - 크로아티아 알파벳 (0) | 2020.11.19 |
<백준 문제풀이: 4673번> 파이썬 - 셀프 넘버 (0) | 2020.11.17 |
<백준 문제풀이: 5622번> 파이썬 - 다이얼 (0) | 2020.11.17 |
<백준 문제풀이: 2908번> 파이썬 - 상수 (0) | 2020.11.16 |