프로그래밍 공부/백준 문제풀기

[백준]1065번 - 한수 파이썬 문제풀이(2가지 방법)

sh1256 2022. 9. 26. 19:47
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이 더 좋다.