일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 파이썬 머신러닝 완벽가이드 공부
- 나동빈
- numpy
- 에스토스테네스의 체
- 그래프란
- 수학
- 알고리즘
- 소수 판정
- BruteForchSearch
- 백준
- allow_pickle
- 데이콘 필사
- 이코테
- 글또8기
- paper review
- Graph Representation Learning
- 질문 정리
- nan값
- 유클리드 호제법
- 코테공부
- CS224W
- #나동빈
- zerodivide
- #이코테2021
- 추천시스템
- graph
- 추천시스템 입문
- BruteForceSearch
- 강의정리
- 논문리뷰
Archives
- Today
- Total
꾸준히 써보는 공부 기록
백준 2231번 : 분해합 본문
문제
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자릿수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이 된다. 따라서 245는 256의 생성자가 된다. 물론, 어떤 자연수의 경우에는 생성자가 없을 수도 있다. 반대로, 생성자가 여러 개인 자연수도 있을 수 있다. 자연수 N이 주어졌을 때, N의 가장 작은 생성자를 구해내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
출력
첫째 줄에 답을 출력한다. 생성자가 없는 경우에는 0을 출력한다.
예제 입력 1
216
예제 출력 1
198
해결 방법
스터디 내용에 맞춰서 Brute Force Search 방식으로 모든 값을 확인하는 방식으로 해결하였다. list(map(int, str(num))) 함수를 사용해서 숫자를 다 분리해서 list로 저장한다. 그리고 최솟값을 구하기 위해서 값을 구할 경우, break로 반복문을 종료한다.
소스 코드
N = int(input())
result = 0
for num in range(1, N+1):
nums = list(map(int, str(num)))
n_sum = num + sum(nums)
if n_sum == N:
result = num
break
if num == N:
result = 0
print(result)
'Algorithm study > 구현' 카테고리의 다른 글
시뮬레이션과 완전 탐색 (0) | 2022.01.06 |
---|---|
백준 14888번 : 연산자 끼워넣기 (0) | 2021.01.03 |
백준 1065번 : 한수 (0) | 2021.01.02 |
백준 19532번 : 수학은 비대면강의입니다 (0) | 2021.01.02 |
백준 2798번 : 블랙잭 (0) | 2021.01.02 |