본문 바로가기
SW 개발

코드 첫 업로드 [백준 1065, 한수, 파이썬]

by 파랑어치 2020. 12. 21.

안녕하세요!

첫 코드 포스트로 백준 1065번 한수 문제를 파이썬으로 풀어 보려고 합니다.

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

 

1065번: 한수

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

www.acmicpc.net


문제 내용 & 코드

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

1<= N <= 1000의 숫자가 주어졌을 때 N보다 작거나 같은 자연수 중에 한수의 개수를 구하는 문제입니다.

저는 파이썬을 사용해서 풀었습니다.

N = int(input()) # 입력
# 첫번째 if-else문
if N<100:
    count = N
else:
	# 두번째 if문
    if(N==1000):
        N = 999
    count = 99
    # for문
    for x in range(100, N+1):
        nums = []
        k = x
        while k > 0:
            nums.append(k%10)
            k = k//10
        dif = nums[1] - nums[0]
        bool = False
        # 두번째 for문
        for i in range(2, len(nums)):
            newdif = nums[i] - nums[i-1]
            if dif != newdif:
                break
            else:
                dif = nums[i] - nums[i-1]
                bool = True
        if bool==True:
            count += 1
            #print(f'{count} for {x}')#print(f'hansu {x} where {newdif} {dif}')+1)            
print(count) #출력

코드 설명

첫번째 if-else문

첫번째 if-else문을 보면 1~99인 수와 100이상의 수를 구분했습니다.

1, 2, ... , 9는 당연히 하나의 숫자만 있기 때문에 한수이고, 10~99 또한 일의 자릿수와 십의 자릿수의 차만 있고 '등차'인지 따로 확인할 것이 없어 모두 한수입니다.

두번째 if문

100이상의 수에서부터 '등차수열' 확인이 필요하고, 기본적으로 첫 if-else문의 else문은 세 자리수를 염두에 두었기 때문에 1000은 예외사항으로 처리하였고 1000은 한수가 아니므로 999와 같은 결과가 나오도록 설정했습니다.

for문

기본적으로 위에서 설명한 것과 같이 1~99는 모두 한수입니다.

그래서 N이 100이상일 때, count 변수는 99로 초기 설정합니다.

그 다음 for문을 통해 100~N의 수 중에 몇 개 숫자가 한수인지 검증합니다.

각 자릿수의 숫자는 10으로 나눈 나머지를 num 배열에 넣고, 두번째 for문을 통해 각 자릿수의 숫자가 등차수열을 이루는지 dif, newdif 변수를 비교하여 두 값이 동일하면 count 변수를 1씩 늘립니다.


마무리하며

코드를 천천히 따라가 보고, 이해가 잘 되지 않는 부분은 print 등을 활용하면서 확인해 보면 위와 같은 방식으로 문제를 풀 수 있다는 것을 알 수 있습니다.

문제를 해결할 수 있는 수많은 방법 중에 하나 뿐이겠지만, 이해하기 쉽고 단순하게 접근하여 풀 수 있는 방식입니다.

코딩 화이팅입니다! 

반응형

댓글