728x90
첫번째 방법
공차를 계산해서 한수를 구함.
메모리: 30840KB, 시간: 68ms
import sys
def sum_han(n):
l=int(n)
if l<100: return n#100이하일 때는 n자체로 한수의 갯수
else: return han_su(n)+99
def list_to_int(lis):
return lis[0]*100+lis[1]*10+lis[2]
def han_su(n):
int_n=int(n)
count=0
ex=[1, 0, 0]
while(True):
m,M=(-(ex[0]//2)), ((9-ex[0])//2)#공차는 최소(m)부터 최대(M)까지 가능
for i in range(m,M+1):
exam=[ex[0], ex[0]+i, ex[0]+i*2]
if list_to_int(exam)<=int_n:
count+=1
else: return count
ex[0]+=1
if ex[0]=='10': return count
n=sys.stdin.readline()
print(sum_han(n))
두번째 방법
100~1000까지 루프를 돌면서 한수가 맞는지 확인
메모리: 113112KB, 시간: 104ms
import sys
def sum_han(n):
l=int(n)
if l<100: return n#100이하일 때는 n자체로 한수의 갯수
else: return han_su(n)+99
def han_su(n):
int_n=int(n)
count=0
for i in range(100, 1002):
if int_n<i: return count
a=(i//100)#100의자리
b=((i%100)//10)#10의자리
c=i%10#1의자리
if a-b==b-c:
count+=1
return count
n=sys.stdin.readline()
print(sum_han(n))
결과: 코드 줄은 방법1이 길지만, 메모리도 시간도 방법1이 더 좋다.
'프로그래밍 공부 > 백준 문제풀기' 카테고리의 다른 글
5639번: 이진 검색 트리 파이썬 문제풀이 (0) | 2023.02.11 |
---|---|
[Python] 여러줄 한번에 읽기 (0) | 2022.11.17 |
[백준] 1874: 스택 수열 문제풀이 (Python) (0) | 2022.09.23 |
백준 연습문제 1002번 풀이 (0) | 2021.12.06 |
백준 연습문제 1001번 풀이 (0) | 2021.12.06 |