성공 | 시도 3번
1065 : [브루트포스 알고리즘] 한수(py)
문제 설명
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
문제 분석
- 숫자가 백의 자리 이상일 때 등차수열인지 확인한다.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
입력과 출력 예시
입력 | 출력 |
110 | 99 |
1 | 1 |
210 | 105 |
1000 | 144 |
500 | 119 |
내 소스
n = input()
cnt = 0
for i in range(1, int(n)+1):
array = list(map(int, str(i)))
diff_array = []
if len(array) >= 2:
for j in range(len(array)-1):
diff_array.append(array[j+1] - array[j])
if diff_array.count(diff_array[0]) == len(diff_array):
cnt += 1
else:
cnt += 1
print(cnt)
소스 설명
n = input()
cnt = 0
for i in range(1, int(n)+1):
array = list(map(int, str(i)))
[1 - 4] : list(map(int, str(i))
코드를 통해 각 자리수를 리스트에 담는다.
diff_array = []
if len(array) >= 2:
for j in range(len(array)-1):
diff_array.append(array[j+1] - array[j])
if diff_array.count(diff_array[0]) == len(diff_array):
cnt += 1
else:
cnt += 1
[5 - 12]
- diff_array 리스트에 항의 차이를 담는다.
- diff_array 리스트에서 diff_array의 첫번째 원소가 몇 개인지 세고 diff_array 리스트의 총 원소 개수와 동일한지 확인한다. 같다면 cnt에 1을 더한다.
→ diff_array의 모든 원소들이 같은 값을 갖고 있다면 diff_array의 첫번째 원소 값과 동일할 것이다. 또 그렇기에 diff_array의 원소 개수와 동일하다.
- array의 원소가 1개인 경우, cnt에 1을 더한다.
→ 한 자리 수는 한수이다.
한수는 무엇일까?
- 일단 무조건 100 미만의 수는 한수이다. (예시 입력 2를 통해 짐작)
- 100 이상인 수인 경우, 각 자리 수의 차가 같아야 한다.
다른 코드 분석
- [2] 님은 각 자리수를 10으로 나눈 나머지와 몫을 이용하여 구하였다.
- 숫자의 범위가 1000 이하라서 천의 자리 수, 백의 자리 수, 십의 자리 수만 비교해도 되었던 것 같다. 또 1000은 한수가 아니라서 제외해도 된다.
회고
- 뭔가 간단한 문제 같았는데 구현하는게 어려웠다. '한수'에 대한 정의도 내 스스로 찝찝하게 한 체로 풀었다.
수정한 최종 소스
n = int(input())
cnt = 0
for i in range(1, n+1):
if i <= 99:
cnt += 1
else:
array = list(map(int, str(i)))
if array[0] - array[1] == array[1] - array[2]:
cnt += 1
print(cnt)
Ref.
1. 문제 풀이 / https://ooyoung.tistory.com/65
3. 문제 풀이 / https://roseline124.github.io/algorithm/2019/03/29/Algorithem-baekjoon-1065.html
* 잘못된 부분에 대해 댓글 남겨주시면 감사하겠습니다! 😀
'코딩테스트' 카테고리의 다른 글
[코테/백준] Python 정수 제곱근 - 2417번 (0) | 2023.05.27 |
---|---|
[코테/백준] Python 숫자 카드 2 - 10816번 (0) | 2023.05.24 |
[코테/백준] Python 셀프 넘버 - 4673번 (0) | 2023.02.21 |
[코딩테스트/Python] 입출력 (0) | 2023.02.14 |
[코테/백준] Python 수들의 합 - 1789번 (0) | 2023.02.05 |
성공 | 시도 3번
1065 : [브루트포스 알고리즘] 한수(py)
문제 설명
어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오.
문제 분석
- 숫자가 백의 자리 이상일 때 등차수열인지 확인한다.
입력
첫째 줄에 1,000보다 작거나 같은 자연수 N이 주어진다.
출력
첫째 줄에 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력한다.
입력과 출력 예시
입력 | 출력 |
110 | 99 |
1 | 1 |
210 | 105 |
1000 | 144 |
500 | 119 |
내 소스
n = input()
cnt = 0
for i in range(1, int(n)+1):
array = list(map(int, str(i)))
diff_array = []
if len(array) >= 2:
for j in range(len(array)-1):
diff_array.append(array[j+1] - array[j])
if diff_array.count(diff_array[0]) == len(diff_array):
cnt += 1
else:
cnt += 1
print(cnt)
소스 설명
n = input()
cnt = 0
for i in range(1, int(n)+1):
array = list(map(int, str(i)))
[1 - 4] : list(map(int, str(i))
코드를 통해 각 자리수를 리스트에 담는다.
diff_array = []
if len(array) >= 2:
for j in range(len(array)-1):
diff_array.append(array[j+1] - array[j])
if diff_array.count(diff_array[0]) == len(diff_array):
cnt += 1
else:
cnt += 1
[5 - 12]
- diff_array 리스트에 항의 차이를 담는다.
- diff_array 리스트에서 diff_array의 첫번째 원소가 몇 개인지 세고 diff_array 리스트의 총 원소 개수와 동일한지 확인한다. 같다면 cnt에 1을 더한다.
→ diff_array의 모든 원소들이 같은 값을 갖고 있다면 diff_array의 첫번째 원소 값과 동일할 것이다. 또 그렇기에 diff_array의 원소 개수와 동일하다.
- array의 원소가 1개인 경우, cnt에 1을 더한다.
→ 한 자리 수는 한수이다.
한수는 무엇일까?
- 일단 무조건 100 미만의 수는 한수이다. (예시 입력 2를 통해 짐작)
- 100 이상인 수인 경우, 각 자리 수의 차가 같아야 한다.
다른 코드 분석
- [2] 님은 각 자리수를 10으로 나눈 나머지와 몫을 이용하여 구하였다.
- 숫자의 범위가 1000 이하라서 천의 자리 수, 백의 자리 수, 십의 자리 수만 비교해도 되었던 것 같다. 또 1000은 한수가 아니라서 제외해도 된다.
회고
- 뭔가 간단한 문제 같았는데 구현하는게 어려웠다. '한수'에 대한 정의도 내 스스로 찝찝하게 한 체로 풀었다.
수정한 최종 소스
n = int(input())
cnt = 0
for i in range(1, n+1):
if i <= 99:
cnt += 1
else:
array = list(map(int, str(i)))
if array[0] - array[1] == array[1] - array[2]:
cnt += 1
print(cnt)
Ref.
1. 문제 풀이 / https://ooyoung.tistory.com/65
3. 문제 풀이 / https://roseline124.github.io/algorithm/2019/03/29/Algorithem-baekjoon-1065.html
* 잘못된 부분에 대해 댓글 남겨주시면 감사하겠습니다! 😀
'코딩테스트' 카테고리의 다른 글
[코테/백준] Python 정수 제곱근 - 2417번 (0) | 2023.05.27 |
---|---|
[코테/백준] Python 숫자 카드 2 - 10816번 (0) | 2023.05.24 |
[코테/백준] Python 셀프 넘버 - 4673번 (0) | 2023.02.21 |
[코딩테스트/Python] 입출력 (0) | 2023.02.14 |
[코테/백준] Python 수들의 합 - 1789번 (0) | 2023.02.05 |