[백준] 2231번 분해합
링크 : https://www.acmicpc.net/problem/2231
문제
풀이
첫번째 풀이 : 1부터 n까지 부분합을 모두 찾았다
first_n = int(input())
n = 0
flg = 0
while n < first_n:
n += 1
n_sum = n
for i in str(n):
n_sum += int(i)
if n_sum == first_n:
print(n)
flg = 1
break
if flg == 0:
print(0)
두번째 풀이 : 이진탐색 이용
-> 제일 작은 값을 어떻게 찾을지 고민해보자
import sys
input = sys.stdin.readline
first_n = int(input())
answer = []
def binary_search(start,end,target):
if start>end:
return 0
mid = (start+end) // 2
# n : 분해합
n = mid
for i in str(mid):
n += int(i)
if target == n:
return mid
elif target > n:
return binary_search(mid, end, target)
else:
return binary_search(start, mid, target)
print(binary_search(1,first_n,first_n))
Author And Source
이 문제에 관하여([백준] 2231번 분해합), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyesoup/백준-2231번-분해합저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)