1065번 : 한수 문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다.
등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다.
N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
https://www.acmicpc.net/problem/1065
풀이 코드
n = int(input())
def hansu(n):
count = 0
for i in range(1,n+1):
array = list(map(int, str(i)))
if i<100:
count += 1
elif (array[0] - array[1]) == (array[1] - array[2]):
count += 1
return count
print(hansu(n))
n = int(input())
- 첫째 줄에서 자연수 n 을 입력받음
- input() 은 한 줄의 문자열만 입력받을 수 있음
- 입력받은 문자열을 정수로 처리하기 위해 int() 함수를 사용
def hansu(n):
- 이름이 hansu 인 함수 생성
- 파라미터로 자연수 n 을 받음
count = 0
- n보다 작거나 같은 한수의 개수를 세는 변수 count 선언
- 0으로 초기화
for i in range(1, n+1):
- range( 시작값, 끝값+1) 을 사용하여, 1부터 n 까지 순회
array = list(map(int, str(i)))
- 1부터 n까지 자연수에서 하나 꺼낸 수를 str(문자열)로 변환
(문자열로 변환하여야 각 자릿수를 분리할 수 있기 때문)
- map 을 이용하여 분리한 각 자릿수를 다시 int 형으로 변환
- 그 결과를 list() 로 전환하여, array 리스트에 저장
if i<100: count +=1
- 1~99 까지의 자연수는 모두 한수
- 100이하의 자연수인 경우, count 값을 1 증가
elif (array[0] - array[1]) == (array[1] - array[2]): count+=1
- i 값이 100 이상인 경우
- 3자리 중에서, 첫번째 자리와 두번째 자리의 차와, 두번째 자리와 세번째 자리의 차가 같으면 한수
- 등차수열에 해당되는 경우, count 값을 1 증가
return count
- 함수의 return 값으로 한수의 개수인 count 반환
print(hansu(n))
- 첫째 줄에서 입력받은 n 의 값을 hansu 함수에 전달
나동빈 '이것이 코딩 테스트다 with 파이썬' 책을 참고하여 작성하였습니다.
https://www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC
'백준 알고리즘 문제 풀이 [Python]' 카테고리의 다른 글
[백준/Python] 11720번 숫자의 합 (문자열) (0) | 2023.02.23 |
---|---|
[백준/Python] 11654번 아스키 코드 (문자열) (0) | 2023.02.23 |
[백준/Python] 4673번 셀프 넘버 (함수) (0) | 2023.02.23 |
[백준/Python] 15596번 정수 N개의 합 (함수) (0) | 2023.02.22 |
[백준/Python] 4344번 평균은 넘겠지 (1차원 배열) (0) | 2023.02.22 |