티스토리 뷰

반응형

 

[Python] 백준 알고리즘 온라인 저지 1065번 : 한수

 

Python3 코드

 

1) def 함수를 생성한 경우

def hansu(num) :
    hansu_cnt = 0
    for i in range(1, num+1):
        num_list = list(map(int,str(i)))
        if i < 100:
            hansu_cnt += 1  # 100보다 작으면 모두 한수
        elif num_list[0]-num_list[1] == num_list[1]-num_list[2]:
            hansu_cnt += 1  # x의 각 자리가 등차수열이면 한수
    return hansu_cnt

num = int(input())
print(hansu(num))

 

2) 함수를 생성하지 않은 경우

num = int(input())

hansu = 0
for i in range(1, num+1):
    num_list = list(map(int, str(i)))
    if i < 100:
        hansu += 1  # 100보다 작으면 모두 한수
    elif num_list[0]-num_list[1] == num_list[1]-num_list[2]:
        hansu += 1  # x의 각 자리가 등차수열이면 한수
print(hansu)

 

 

Python3 코드 풀이

1. 코드 작성에 대한 전체적인 내용

이번 문제는 랜덤으로 숫자를 입력받으면 1부터 입력받은 숫자까지의 범위 안에서 숫자의 각 자리 숫자가 등차수열을 이루는 수가 몇 개인지를 출력하는 문제이다. def 예약어로 함수를 생성한 코드와 함수를 생성하지 않은 코드 두 가지 경우로 코드를 작성해보았다.

 

2. 등차수열

숫자와 숫자의 사이의 간격이 동일한 숫자의 나열이다. 이 문제에서 두 자리 숫자는 등차수열인지 비교대상이 없기 때문에 모두 한수이고 세자리 숫자는 각 자리의 숫자 간격이 동일하면 한수이다. 

 

3. 등차수열을 찾는 for문을 작성한다.

for i in range(1, num+1):
    num_list = list(map(int, str(i)))
    if i < 100:
        hansu += 1  # 100보다 작으면 모두 한수
    elif num_list[0]-num_list[1] == num_list[1]-num_list[2]:
        hansu += 1  # x의 각 자리가 등차수열이면 한수

 

num변수는 입력 받은 숫자를 선언한 변수이다. 1부터 num까지의 숫자 범위에서 한수를 찾는 문제이기 때문에 range 함수를 이용해서 숫자 범위를 생성했다. 

 

숫자는 해당 숫자를 이루는 각각의 자릿수 숫자를 분리할 수 없다. 그렇기 때문에 for문의 변수 i를 str함수로 문자열로 변환시키고서 각 자릿수를 분리해서 다시 int 타입으로 변환시켰다. 

 

1~99는 모두 한수이다. 그래서 if 조건식으로 변수i가변수 i가 100보다 작은 경우 모두 hansu라는 변수에 숫자를 더하도록 했고 변수 i가 100 이상인 경우 3자리 숫자를 앞의 두 자리의 차이와 뒤의 두 자리의 차이가 같으면 한수이다.

 

반응형
댓글
반응형