https://www.acmicpc.net/problem/2231
✨ 문제
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다.
자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
내 코드
import sys
input = sys.stdin.readline
def main() :
n = int(input())
ans = 0
lower_gnrt = max(1, n-(len(str(n)) * 9)) #이론상 시작 최소 범위 #작은 자리 수 같은 경우에는 음수로 내려가므로 조절
max_gnrt = n
for val in range(lower_gnrt, max_gnrt) :
sub_gnrt= val
for i in range(len(str(val))) :
sub_gnrt += int(str(val)[i])
if (sub_gnrt == n) :
min_gnrt = val
ans = min_gnrt
break
print(ans)
if __name__ == "__main__" :
main()
단순히 브루트 포스로 풀지 않으려고 노력했다.
이론상 시작할 수 있는 범위를 제한해서 시간을 획기적으로 줄일 수 있었다.

풀이 시간

'알고리즘 > 백준' 카테고리의 다른 글
| 백준 1018번 : 체스판 다시 칠하기(S4) (1) | 2025.01.23 |
|---|---|
| 백준 19532번 : 수학은 비대면강의입니다(B2) (0) | 2025.01.23 |
| 백준 2798번 : 블랙잭(B2) (0) | 2025.01.22 |
| 백준 11651번 : 좌표 정렬하기2(S5) (0) | 2025.01.21 |
| 백준 11650번 : 좌표정렬하기(S5) (0) | 2025.01.21 |