[백준 1490] 자리수로 나누기
Tip
•
모든 자릿수로 나누어 떨어진다 = 모든 자릿수의 최소공배수로 나누어 떨어진다
◦
math.lcm() 사용
•
원래 숫자 뒤에 새롭게 숫자가 붙어 갱신될 숫자의 규칙성
◦
n + 0~9 : cnt = 1
◦
n + 00 ~ 99 : cnt = 2
◦
n + 000 ~ 999 : cnt = 3
→ len(0 ~ 10 ** cnt)
→ int(n + '0' * (cnt - len(str(i))) + str(i))
풀이 소스 코드
import sys, math
si = sys.stdin.readline
n = si().rstrip()
nums = []
for i in n:
if i != '0':
nums.append(int(i))
# 모든 자릿수로 나누는 과정을 최소화하기 위해 최소공배수 개념 사용
for i in range(1, len(nums)):
nums[0] = math.lcm(nums[0], nums[i])
# 최소공배수로 나누어 떨어진다면(모든 자릿수로 나누어 떨어진다면)
if int(n) % nums[0] == 0:
print(int(n))
else: # 아닌 경우 원래 수에 추가적으로 숫자를 차례대로 붙여주며 검사
cnt = 1
ok = False
while True:
for i in range(0, 10 ** cnt):
if int(n + '0' * (cnt - len(str(i))) + str(i)) % nums[0] == 0:
result = int(n + '0' * (cnt - len(str(i))) + str(i))
print(result)
ok = True
break
if ok == True:
break
cnt += 1
Python