Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 개발스터디
- 프리온보딩
- codepresso
- Python
- 한빛미디어
- 환경변수
- cleancode
- env
- 파이썬
- mongodb
- AWS
- git
- flask
- 리액트
- pyladiesseoul
- 개발
- 코테
- 예리님
- 원티드
- 위코드
- 한빛
- 플라스크
- 깃
- 패스트캠퍼스
- fluentpython
- pyladies
- 스터디
- 코드프레소
- React
- 전문가를위한파이썬
Archives
- Today
- Total
개발자가 내팔자
[BOJ] 백준 2231 분해합 python 본문
https://www.acmicpc.net/problem/2231
2231번: 분해합
어떤 자연수 N이 있을 때, 그 자연수 N의 분해합은 N과 N을 이루는 각 자리수의 합을 의미한다. 어떤 자연수 M의 분해합이 N인 경우, M을 N의 생성자라 한다. 예를 들어, 245의 분해합은 256(=245+2+4+5)이
www.acmicpc.net
문제 읽으면서 뭔 개소리야... 라고 생각했다.
무슨 특별한 공식 같은 게 있을거라 생각하고 계속 문제를 노려보면서 생각했는데,
시간 제한이 2초라는 것을 보고 그냥 반복문을 돌려야겠다고 생각했다.
그래도 파이썬은 느리니까 범위를 좀 지정해주었다.
코드는 아래와 같다.
number = input()
place = len(number)
number = int(number)
if number > place * 9:
min_num = number - place * 9
else:
min_num = 1
def solution(number):
for num in range(min_num, number):
answer = num
result = num
while num > 0:
result += num % 10
num //= 10
if result == number:
return answer
return 0
print(solution(number))
min_num은 범위를 좁히기 위한 처치인데, 10진수 정수의 각 자리수의 최댓값인 9가 오는 것으로 잡았다.
만약 333이 온다면 3 * 9 = 27을 뺀 306부터 검사한다. 0부터 검사하는 건 불필요하기 때문이다.
사실 이보다 더 좋은 풀이가 있을 것 같지만 귀찮아서 다음에 알아보기로 한다.
'Algorithms' 카테고리의 다른 글
[BOJ] 백준 2493 탑 python (0) | 2022.05.20 |
---|---|
[BOJ] 백준 1406 에디터 python (0) | 2022.05.20 |
[BOJ] 백준 2292 벌집 python (0) | 2022.05.19 |
[BOJ] 백준 2775 부녀회장이 될테야 python (0) | 2022.05.19 |
[BOJ] 백준 2839 설탕 배달 python 풀이 (0) | 2022.05.19 |
Comments