Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 파이썬
- 알고리즘스터디
- programmers
- javascript
- 알고리즘
- Join
- 프로그래머스
- aws jupyter notebook
- openCV
- Stack
- 자료구조
- Algorithm
- MySQL
- 가상환경
- queue
- pandas
- 알고리즘 스터디
- 노마드코딩
- type hint
- 정보처리기사 c언어
- 선그래프
- python
- 백준
- Matplotlib
- Selenium
- NumPy
- dataframe
- 데이터시각화
- 코딩테스트
- String Method
Archives
- Today
- Total
조금씩 꾸준히 완성을 향해
[Algorithm] 백준 1065 한수 with Python 본문
문제
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
예제 입력 1
110
예제 출력 1
99
내가 짠 코드
n = int(input())
def func(n):
cnt = 0
for i in range(1, n+1):
if i >= 100:
a1 = i %10 #셋째 자리수
i = i // 10
a2 = i % 10 #둘째 자리수
a3 = i // 10 #첫째 자리수
if a3 - a2 == a2 - a1 : #등차수열 확인
cnt += 1
else: # 일의 자리부터 십의 자리 숫자까지는 무조건 한수
cnt += 1
return cnt
print(func(n))
자리수를 구할 때 숫자를 문자열로 바꾸면 더 쉽게 구현이 가능하다는 걸 알았지만, 최대한 숫자 그대로 짜보려고 노력했다. 덕분에 조건문이 중첩되고 코드도 길어졌지만 성공은 했다.
일단 일의 자리부터 십의 자리수까지는 무조건 한수이기 때문에 카운팅을 해주었다. 100의 자리일 경우에는 몫과 나머지 개념을 이용해서 자리수를 잘라서 각각 변수에 저장을 했다. 그리고 그게 등차수열인지 확인한 후 맞으면 카운팅을 해주었다.
다른 코드 참고
def func(n):
cnt = 0
for i in range(1, n+1):
temp = list(map(int, str(i)))
if i < 100:
cnt += 1
elif temp[0] - temp[1] == temp[1] - temp[2]:
cnt += 1
return cnt
print(func(n))
보다시피 이 방법으로 하면 훨씬 짧고 간단하다.
숫자를 문자열로 바꾸고, 그걸 다시 정수로 maping 한 후 list에 넣으면 아주 쉽게 자리수가 저장된다.
마찬가지로 100 미만의 숫자들은 다 카운팅 해주고, 100 이상인 경우에 등차수열인지 확인을 한 후 카운팅한다.
다양한 데이터 타입 매핑 방법을 잘 기억해 놓아야겠다.
'DataStructure & Algorithm > 문제풀이' 카테고리의 다른 글
[Algorithm] 백준 1110 더하기 사이클 with Python (0) | 2022.09.25 |
---|---|
[Algorithm] 백준 4344 평균은 넘겠지 with Python (0) | 2022.09.25 |
[Algorithm] 백준 8958 OX퀴즈 with Python (0) | 2022.09.22 |
[Algorithm] 백준 2525 오븐 시계 with Python (0) | 2022.09.16 |
[Algorithm] 부분 수열의 합 (0) | 2022.09.13 |