📝 문제
> 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
🐯 문제 설명
- 각 자리수를 쪼갰을 때 그 리스트가 등차수열이면 함수다! 위에 예시를 참고하면 이해에 도움이 될 것이다.
https://www.acmicpc.net/problem/1065
🎨 풀이
💡 성공 코드
def hansu(num):
arr = list(map(int,str(num)))
d = arr[1] - arr[0]
for i in range(len(arr)-1,0,-1):
tmp = arr[i] - arr[i-1]
if tmp != d :
return False
return True
def main():
n = int(input())
count = 0
for num in range(1,n+1):
if num < 100 :
count += 1
else :
result = hansu(num)
if result == True:
count += 1
print(count)
main()
> (실행 흐름에 따라 순서를 작성했습니다)
1. main 함수를 실행한다.
< main >
2. n을 입력받고, count 변수를 만든다.
- count 변수로 한수의 개수를 셀 예정이다.
3. ------------------- 1부터 n까지 for문을 돌린다! ------------------
4. 만약 수가 100보다 작으면 바로 count += 1을 해준다.
- 100보다 작은 수는 모두 한수이기 때문이다.
- 한자리수는 무궁무진한 미래를 가지고 있는 느낌이라 한수다.
- 두자리수도 비슷한데, 예시로 설명해보자면 13 = [1,3]은 첫째항이 1이고 공차가 3인 등차수열이다. 그래서 한수가 된다.
5. 수가 100과 같거나 그것보다 크다면 그 값을 넘기면서 hansu 함수를 실행시킨다.
< hansu >
6. 받아온 값을 arr에 쪼개서 담아준다.
7. arr[1] - arr[0]을 통해 수의 차이를 구한 후 d에 넣는다.
- 공차라 하긴 뭐하고 수의 차이정도...? 등차수열 아닐 수도 있으니까!
8. for문을 이용해서 뒤에 있는 수부터 차례대로 차이를 구한 후 아까 구했던 d와 비교한다.
9. 만약 d와 tmp 값이 같지 않다면 return False를 하며 함수를 탈출한다.
10. return False를 하지 않고 for문을 끝냈다면 등차수열이라는 뜻이다! 그래서 True를 return해준다.
<다시 main>
11. result에 return된 값을 담아두고, 그 값이 True라면 count를 +1 해준다. (한수 인정 처리)
-------------------------- for문 끝! -------------------------
12. count를 print 해준다~
끝~
⭐ 느낀점
> 어유 어렵다야. ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 못풀수도 있을거라 생각했는데 맞혔습니다! 글씨 보니까 너무 좋았다~ 고생했다. 더 고생 많이해야지 파이팅하자!!!!!!!
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 11720번 - 숫자의 합 (파이썬) (0) | 2022.06.13 |
---|---|
[백준] 11654번 - 아스키 코드 (파이썬) (0) | 2022.06.12 |
[백준] 4673번 - 셀프 넘버 (파이썬) (0) | 2022.06.10 |
[백준] 15596번 - 정수 N개의 합 (파이썬) (0) | 2022.06.09 |
[백준] 4344번 - 평균은 넘겠지 (파이썬) (0) | 2022.06.08 |