문제 📖
처음에 문제를 접했을 때, 조건이 이해가 가지않아 엄청 당황스러웠었다.
문제의 조건은 range(1,1000)사이의 한수, 한수의 갯수를 출력하는 문제이다.
문제가 이해가가지 않을때는 입출력 예시를 보면 도움이된다.
- 110 -> 99
- 1 -> 1
- 210 -> 105
- 1000 -> 144
range(1,1000)이므로 한자리수, 두자리수, 세자리수, 네자리수(1000)만 고려하면 될 것같다.
- 한 자리수
-> 등차수열이란 각 자리수마다 일정한 공차가 있어야하는 수인데
1,2,3,,,,,9 와 같은 수는 어떻게해야하는가? 입출력을보면 한자리수 마다 1개씩 인정을 해줌을 확인할 수 있다.
- 두 자리수
-> 10,11,12,...99 는 각 자리수 마다 공차가 1이므로 두자리수는 각 1개씩 인정해줌을 확인할 수 있다.
- 세 자리수
-> 좀 더 쉬운 이해를 위해 아래와 같이 정리했다.
111 (0) 123 (1) 135(2) 147(3) 159(4) 2
222 (0) 234(1) 246(2) 258(3)
333 (0) 345(1) 357(2) 369(3)
444 (0) 456(1) 468(2)
555 (0) 567(1) 579(2)
666 (0) 678(1)
777 (0) 789(1)
888 (0)
999 (0)
- 네 자리수
-> 1000 은 인정 x
풀이🙏
- 한 자리수
-> 한 자리수를 입력받았을 때, print(N)을 출력
- 두 자리수
-> 두 자리수 N을 입력받았을 때, print(N)을 출력
- 세 자리수
-> print(기존 99까지의 N + 각 자리수마다의 공차가 성립하는 수)
-> N의 각 자릿수를 list(map(int,str(N)))으로 분할,append하고 첫번째 자리수와 두번째 자리수의 공차와 두번째 자리수와 세번째 자리수의 공차가 같으면 한수의 조건 성립
- 네 자리수
-> 1000은 각 자리수마다 공차가 성립되지않으므로 세 자리수로 넘어간다.
코드💻
N = int(input())
def hansu(num):
cnt = 0
for i in range(1,num+1):
if i <= 99:
cnt += 1
else:
nums = list(map(int, str(i)))
if nums[0] - nums[1] == nums[1] - nums[2]:
cnt += 1
print(cnt)
hansu(N)
결과😎
출처📝
https://www.acmicpc.net/problem/1065
풀코드
github