728x90
반응형
https://www.acmicpc.net/problem/1065
cnt라는 변수를 만들고 반복문으로 1부터 입력받은 값까지 한수가 있으면 cnt 값을 1씩 증가시키면 된다.
한수가 되기 위해서는 연속된 값의 차이를 모두 조사해서 조사한 값들이 모두 같아야 한다.
연속된 값의 차이를 구하기 위해서 해당 숫자의 각 자릿수를 모두 리스트의 요소로 만들어주면 쉽게 구할 수 있다.
s=list(map(int, str(n)))
그리고 연속된 값의 차이가 모두 같은지 확인하기 위해서 파이썬의 set(집합)을 사용했다.
집합은 중복된 값을 허용하지 않으므로 모든 연속된 값의 차이를 set에 넣고 set의 길이가 1이라면 모두 같다는 것을 의미한다.
cnt=0
def hans(n):
global cnt #전역 변수 선언
s=list(map(int, str(n)))
if len(s)<=2: #두 자리수, 한 자리수는 모두 한수
cnt+=1
return 0
se=set()
for i in range(len(s)-1):
se.add(s[i+1]-s[i]) #일단 집합에 공차를 모두 넣기
if len(se)==1: #집합의 특성 상 중복이 존재하지 않으므로 길이가 1이면 공차가 모두 같음
cnt+=1
n=int(input())
for i in range(1,n+1):
hans(i)
print(cnt)
728x90
반응형
'백준 알고리즘' 카테고리의 다른 글
[백준 2231][파이썬] 분해 합 (0) | 2023.02.09 |
---|---|
[백준 25682][파이썬] 체스판 다시 칠하기 (0) | 2023.01.28 |
[백준 9020][파이썬] 골드바흐의 추측 소수 판별 (에라토스테네스의 체) (0) | 2023.01.26 |
[백준 2563][파이썬] 색종이. 이차원 배열 (0) | 2023.01.25 |
[백준 10828][파이썬] 파이썬 스택 사용법 (0) | 2023.01.21 |
댓글