백준 알고리즘 문제 풀이 [Python]

[백준/Python] 1065번 한수 (함수)

wlalsu_u 2023. 2. 23. 06:20

1065번 : 한수 문제

 

 

어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다.

 

등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다.

 

N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.

 

 

 

 

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

 

1065번: 한수

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

www.acmicpc.net

 

 


 

풀이 코드

 

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