참고: https://www.acmicpc.net/problem/1065
✔️ 문제
문제는 다음과 같다.
✔️ 풀이
처음에 이제 등차에 해당하는 data를 만들어서
값을 비교하려고 리스트 하나를 만들었다.
data=[111,123,135,147,159,210,222,234,246,257,321,333,345,357,369,420,432,444,456,468,531,543,555,567,579,630,642,654,666,678,741,753,765,777,781,840,852,864,876,888,951,963,975,987,999]
근데 생각을 해보니까 프로그래밍인데 너무 구시대적인 방법이고,,
그리고 쓰다보니 공통점을 발견할 수 있었다.
1) 1부터 9까지는 모두 등차수열에 해당하기 때문에 9가지가 있다.
2) 10부터 99까지도 모두 등차수열에 해당하기 때문에 90가지가 있다.
3) 100부터 999까지는 각 자리 숫자에 대한 비교 연산을 해야한다.
이때, data 리스트 내 값들을 살펴보면 (인덱스0-인덱스1)=(인덱스1-인덱스2)
에 해당하는 값들만 수열이 되는 것을 확인할 수 있다.
그렇기 때문에 1~2까지는 99를 카운트하고,
3부터는 비교하면서 카운트를 해야한다.
함수를 사용하지 않은 첫 번째 방법은 다음과 같다.
N=int(input())
count=0
for i in range(1,N+1):
data=list(map(int,str(i)))
if i<100:
count+=1
elif data[0]-data[1]==data[1]-data[2]:
count+=1
print(count)
하지만 해당 문제는 함수에 포함되어 있기 때문에
동일한 코드를 함수로도 제작할 수 있다.
def hanFunc(n):
count=0
for i in range(1,n+1):
data=list(map(int,str(i)))
if i<100:
count+=1
elif data[0]-data[1]==data[1]-data[2]:
count+=1
return print(count)
hanFunc(int(input()))
한수라는 개념을 새롭게 알아가게 되었다.
ps. 머리가 안돌아갈때는 손을 사용하자.
화이팅 💪
'알고리즘(algo) > 백준' 카테고리의 다른 글
[백준] 2566번 - 최댓값 (0) | 2023.01.21 |
---|---|
[백준] 2577번 - 숫자의 개수 (0) | 2023.01.20 |
[백준] 15596번 - 정수 N개의 합 (0) | 2023.01.19 |
[백준] 1546번 - 평균 (0) | 2023.01.18 |
[백준] 3052번 - 나머지(중복 제거) (0) | 2023.01.18 |