■ 2231번 분해합 문제
■ 코드 풀이
아이디어를 설명해 드리겠습니다. 입력받은 자연수 N은 분해합입니다. 자신과 각 자릿수의 합입니다. 자연수 N의 가장 작은 생성자를 구하기 위해서는 먼저 각 자릿수의 합의 최댓값을 빼주고 시작합니다. 자연수 N의 최댓값은 백만이므로 나올 수 있는 자릿수의 합의 최댓값은 54(N이 999,999일 경우)입니다. 이때 입력받은 값이 54보다 작을 경우 음수가 나오므로 if 조건으로 구분해 줍니다.
이제 N-54부터 N까지 1씩 증가시키면서 total이라는 변수에 자기 자신과 각 자릿수의 합을 더해 새로운 분해합을 만듭니다. 그리고 이 분해합이 최초 입력받은 수 N과 같아지는 순간 break로 for문을 탈출하면 total에 있는 숫자가 바로 최소 생성자가 됩니다.
N = int(input())
end = False
if N >= 55: # N이 55 이상인 경우
for i in range(N-54, N):
total = i
for j in range(len(str(i))):
total += int(str(i)[j])
if total == N:
print(i)
end = True
break
else: # N이 1 이상 54 이하인 경우
for i in range(0, N):
total = i
for j in range(len(str(i))):
total += int(str(i)[j])
if total == N:
print(i)
end = True
break
if end == False:
print(0)
'코딩 테스트 > Python_백준' 카테고리의 다른 글
[백준/Python] 1018번 체스판 다시 칠하기 문제 (0) | 2023.05.05 |
---|---|
[백준/Python] 19532번 수학은 비대면강의입니다 문제 (0) | 2023.05.04 |
[백준/Python] 2798번 블랙잭 문제 (0) | 2023.05.02 |
[백준/Python] 24313번 알고리즘 수업 - 점근적 표기 1 문제 (0) | 2023.05.01 |
[백준/Python] 24267번 알고리즘 수업 - 알고리즘의 수행 시간 6 문제 (0) | 2023.04.30 |
댓글