안녕하세요!
첫 코드 포스트로 백준 1065번 한수 문제를 파이썬으로 풀어 보려고 합니다.
https://www.acmicpc.net/problem/1065
문제 내용 & 코드
어떤 양의 정수 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 등을 활용하면서 확인해 보면 위와 같은 방식으로 문제를 풀 수 있다는 것을 알 수 있습니다.
문제를 해결할 수 있는 수많은 방법 중에 하나 뿐이겠지만, 이해하기 쉽고 단순하게 접근하여 풀 수 있는 방식입니다.
코딩 화이팅입니다!
'SW 개발' 카테고리의 다른 글
두 수 나누기 [백준1008, A/B, 파이썬] (0) | 2022.02.13 |
---|---|
두 수의 곱 출력 [백준 10998, AxB, 자바] (0) | 2022.02.13 |
각종 안드로이드 스튜디오 라이선스 오류 해결 (0) | 2021.11.07 |
파이썬 특수문자 프린트 [백준 10171, 고양이, 파이썬] (0) | 2021.09.22 |
백준 자바 코드 제출 형식 (0) | 2021.09.21 |
댓글