문제 링크

문제 요약

주어진 두 정수 에 대해, “거의 좋아하는 수”의 개수를 찾아야 합니다.

“거의 좋아하는 수”는 데드풀이 가장 좋아하는 수 으로 끝나는 모든 숫자를 의미하며, 을 초과하지 않는 “거의 좋아하는 수”가 총 몇 개인지 세어야 합니다.

예를 들어, 라면 등이 “거의 좋아하는 수”가 됩니다. 입력으로 이 주어지며, 의 범위를 가집니다.

풀이

이 문제는 으로 끝나는 수들이 어떤 규칙을 가지는지 파악하는 것이 중요합니다. 으로 끝나는 수들을 나열해보면 다음과 같은 패턴을 발견할 수 있습니다.

예를 들어, 라면, … 이 됩니다.

이 수들은 모두 으로 시작하여, 씩 증가하는 등차수열을 이룬다는 것을 알 수 있습니다. 여기서 의 자릿수입니다.

  • 만약 라면 (자릿수 1). 수열은 (공차 )
  • 만약 라면 (자릿수 2). 수열은 (공차 )
  • 만약 이라면 (자릿수 3). 수열은 (공차 )

따라서, 을 첫 항으로 하고, 공차가 인 등차수열에서 보다 작거나 같은 항의 개수를 세면 됩니다.

이를 계산하는 공식은 (마지막 항 - 첫 항) // 공차 + 1 입니다. 여기서 마지막 항은 이 될 수 있고, 첫 항은 이며, 공차는 입니다.

코드에 이 아이디어를 그대로 반영해봅시다.

  1. n의 자릿수를 k에 저장합니다. (len(str(n)))
  2. 공차 step으로 계산합니다. (10 ** k)
  3. (m - n) // step + 1을 계산하여 결과를 출력합니다. 이는 부터 시작하여 까지 간격으로 몇 개의 숫자가 존재하는지를 효율적으로 계산하는 방법입니다.

정답 코드

"""
[29074: Почти любимые числа](https://www.acmicpc.net/problem/29074)
 
Tier: Bronze 1 
Category: arithmetic, math
"""
 
 
import sys
from math import sqrt, pi, sin, factorial, ceil, floor
from datetime import datetime, timedelta
from collections import deque, defaultdict, Counter
from itertools import permutations, combinations, product
from bisect import bisect_left, bisect_right
from heapq import heappush, heappop, heapify
from functools import reduce, lru_cache
from operator import itemgetter, attrgetter, mul, add, sub, truediv
from typing import List, Tuple, Dict, Set, Any, Union
 
SYS_INPUT = True
RECURSION_LIMIT = 10 ** 7
SET_RECURSION = True
BLANK = " "
 
if SET_RECURSION:
  sys.setrecursionlimit(RECURSION_LIMIT)
 
inp = lambda : sys.stdin.readline().rstrip() if SYS_INPUT else input()
mii = lambda : [*map(int,inp().split())]
mfi = lambda : [*map(float,inp().split())]
ii = lambda : int(inp())
fi = lambda : float(inp())
isplit = lambda : inp().split()
p = print
 
def gcd(a, b): return gcd(b, a % b) if b > 0 else a
def lcm(a, b): return a * b // gcd(a, b)
 
def solve():
  n, m = mii()
 
  k = len(str(n))
 
  step = 10 ** k
 
  print((m - n) // step + 1)
 
if __name__ == "__main__":
  tc = 1
  for t in range(1, tc+1):
    ret = solve()
 

연관 페이지

참고 문헌 / 사이트