-
브루트 포스> 2231. 분해합ALGORITHM/BAEKJOON 2020. 9. 18. 08:34728x90
<문제링크: www.acmicpc.net/problem/2231>
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
문제설명: 숫자 N이 주어지고, 각 자리 수와 해당 값의 합으로 이 N을 만들 수 있는 숫자들 중
가장 작은 숫자를 찾는 문제이다. 만약 이처럼 만들 수 없다면, 0을 출력해야 한다.
[1차 시도]
N = int(input()) minV = 1000000000 check = N while check>N//2: sumup = 0 num = check while num>0: sumup+=num%10 num //=10 if check+sumup ==N and check< minV: minV = check check-=1 print(minV if minV !=1000000000 else '0')
풀이: 정답이 될 수 있는 후보들 중 가장 작은 값을 구하기 위한 minV를 적당히 큰 숫자로 설정해주고,
N보다 작은 수들 중 후보를 찾아가기 위한 check 변수를 만들어준다.
범위를 대략적으로 N의 절반으로 잡아서 while문을 돌려주는데 각 자리수의 합을 저장할 sumup과
각 자리수의 값을 구하기 위한 num을 check로 갱신해준다.
그 다음 num이 양수일 때 까지 반복하면서 10으로 나눈 값의 나머지를 sumup에 더해주고
num은 10으로 나눈 값으로 다시 갱신한다.
해당 값의 자리수를 다 더해주었으면, 현재의 값인 check와 현재 값의 자리수 합인 sumup을 더한 값이 N과 같고,
현재까지의 최소값보다 작다면, minV를 현재 값 check로 갱신해주면 된다.
다시 check는 -1을 해주어 탐색을 계속한다.
최종적으로 minV를 출력해주는데 만약 minV가 처음 초기의 값이라면,
찾고자하는 숫자가 없다는 의미로 0을 출력해주면 된다.
채첨결과: 정상적으로 잘 통과한다.
Git push 취소 방법 (feat. '쫄보의삽질' 블로그 탄생 배경)
아래는 저의 생생한 경험담을 바탕으로 작성한 것 입니다. Github 관리 폴더의 이름을 실수로 변경하고 삭제해버렸다. 작업 후 commit 하려고 아무리 찾아봐도 폴더가 보이지 않았다. 나의 피땀눈물
ninano1109.tistory.com
'ALGORITHM > BAEKJOON' 카테고리의 다른 글
그리디 알고리즘> 1931. 회의실배정 (0) 2020.09.23 백트래킹> 15649. N과 M (1) (0) 2020.09.21 그리디 알고리즘> 11047. 동전 0 (0) 2020.09.17 브루트 포스> 7568. 덩치 (0) 2020.09.15