백준(BOJ)

[백준] 1065번 문제 풀이 : 파이썬(python) 코드 설명

CuriHuS 2021. 2. 5. 01:01
반응형

 

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

 

1065번: 한수

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

www.acmicpc.net


Hint

 

두 자리 수는 항상 한수이며

세 자리 수부터 일정한 차이가 있는지 확인한다

 


Solution

 

List = []
def hans(a):
    if a < 100:
        List.append(a)
    else:
        hans_list = []
        for i in range(len(str(a))-1):
            hans_list.append(int(str(a)[i+1]) - int(str(a)[i]))
        hans_list.sort()
        if hans_list[0] == hans_list[len(hans_list)-1]:
            List.append(a)
        else:
            return 0

N = int(input())

for i in range(N+1):
    hans(i)

print(len(List)-1)

위는 실제로 정답인 코드입니다

 

hans함수는

List라는 list에 해당 수가 한수이면 삽입합니다.

 

아래는 코드 설명입니다

 

    if a < 100:
        List.append(a)

십의 자리, 일의 자리 수 모두는

한수입니다

최소 규칙을 파악하려면 세 개의 수는 주어져야 하는데

두 개 이하의 수가 주어지면 어떤 규칙이든

짜맞출 수 있으므로 모두 List에 수를 넣어줍니다

 

    else:
        hans_list = []
        for i in range(len(str(a))-1):
            hans_list.append(int(str(a)[i+1]) - int(str(a)[i]))
        hans_list.sort()
        if hans_list[0] == hans_list[len(hans_list)-1]:
            List.append(a)
        else:
            return 0

 

[line 5]

여기서 else는 세 자리 이상의 수를 가져옵니다.

hans_list는 해당 수의 각 숫자의 차를 기록하는 리스트입니다.

 

여기서 int 자료형은 각 자리에 있는 수를 따로 가져오지 못하므로

str 자료형으로 수를 가져온 다음 계산을 위해 int로 변경합니다

 

위 코드블럭의 line 4를 보면

hans_list에 자리에 있는 수의 차이를 기록합니다

그 후 sort를 합니다.

 

여기서 sort를 하는 이유는 그 다음

hans_list에 있는 값들의 차이를 확인하기 위함인데

line 6 if 문에서 이를 확인합니다.

 

 

반응형