https://www.acmicpc.net/problem/1065
숫자가 있을 때, 숫자를 자리수마다 모두 쪼개어 모든 자리수가 등차를 이루면(공차가 동일하면) 한수라고 한다.
ex) 123
123은 자리수에 따라 1, 2, 3 으로 나눌 수 있고, 1과 2는 1만큼 차이가 나며(공차), 2와 3 역시 1만큼 차이가 나기(공차) 때문에 등차를 이루며, 모든 자리수가 일정한 공차를 성립하기 때문에 한수이다.
1~9까지는 길이가 1인 등차수열이기 때문에 한수이고,
10~99까지는 길이가 2이고 한 가지 공차를 가지며, 이것을 공차가 일정하다고도 볼 수 있기 때문에 한수이다.
-> 1~99까지는 모두 한수이다.
이때 자연수 1~1000까지 중 임의의 숫자를 입력했을 때 입력 값의 범위까지의 한수 개수를 구하는 코드를 구현하는 것이 목표이다.
max_num = int(input())
hansu_count = 0
for i in range(1, max_num+1):
if i < 100: # 100보다 작은 경우 모두 한수
hansu_count += 1
else:
i = str(i)
gongcha = -99
for j in range(len(i)-1):
if j == 0: # 첫 번째 비교라면
gongcha = int(i[j]) - int(i[j+1])
continue
elif j == int(len(i)-2): # 마지막 비교라면
if gongcha == int(i[j]) - int(i[j+1]):
hansu_count += 1
break
else: # 중간 비교라면
if gongcha != int(i[j]) - int(i[j+1]):
break
print(hansu_count)
input 값을 최대 숫자로 인식하고 for문을 통해 input 값만큼 반복한다.
우선 사전 문제 해석에서 100이하는 모두 한수임을 알 수 있었기 때문에, 100보다 작은 값은 한수로 취급하여 한수 개수 count를 증가시켜준다.
100보다 큰 값이 들어오는 경우 해당 값의 자릿수-1만큼 반복하며,
1) 첫 번째 비교인 경우 첫 번째 자리의 값과 두 번째 자리의 값의 공차를 gongcha 변수에 넣는다.
2) 마지막 비교(자릿수-1)인 경우 마지막 자리-1의 값과 마지막 자리의 값의 공차가 gongcha와 동일한 경우 한수 count를 증가시킨다.
3) 중간 자리의 비교인 경우 기존 gongcha와 해당 자리의 공차를 비교한 값이 다른 경우 해당 숫자의 비교를 끝낸다.
-> 예제에서 1~1000까지만을 비교로 넣었기에 3번 대신 1000인 경우 break와 같은 방식으로 2번과 3번을 더 간편하게 만들 수 있었으나, 자릿수가 4자리 이상인 경우에도 사용가능하도록 만들었다.
...
elif j == len(i)-1: # 마지막 비교라면
if gongcha == int(i[j]) - int(i[j+1]):
hansu_count += 1
break
...
마지막 자리수 앞의 비교이기 때문에 elif의 조건(마지막 연산)을 len(i)-1로 주었다.
(int(i[j]) - int(i[j+1]) 와 같은 형태로 공차를 비교하는데, 이때 마지막 자리까지 비교한다면 int(i[j+1])은 에러가 뜰 것이기 때문에)
문제는 len으로 문자열의 길이를 구하면 문자열의 개수만큼 수가 나오며, (ex. len('123')은 3이 출력) 그대로 조건에 이용하면 자리수가 올바르지 않게 되기 때문에 -1을 할 필요가 있다.
따라서 elif의 조건은 len(i)-2가 되었어야 한다.
해당 코드는 에디터가 코드 연습을 위해 직접 작성하였습니다.
혹시 오류가 있거나 더 좋은 코드 방향성을 아시는 분은 댓글로 남겨주시면 감사하겠습니다..!
[Baekjoon] 백준 1157번 문제 풀이 (Python) (0) | 2021.08.03 |
---|---|
[Baekjoon] 백준 7568번 문제 풀이 (Python) (0) | 2021.08.02 |
[Baekjoon] 백준 2798번 문제 풀이 (Python) (0) | 2021.07.23 |
[Baekjoon] 백준 2839번 문제 풀이 (Python) (0) | 2021.07.20 |
[Baekjoon] 백준 2941번 문제 풀이 (Python) (0) | 2021.07.19 |