분해합 구하기
https://www.acmicpc.net/problem/2231
분해합을 구하는 것은 작성할 수 있겠는데 생성자는 어떻게 해야할지 막막했다. 어떤 범위의 수들을 확인해야할지 감이 오지 않아서 검색을 통해 코드를 작성했다.
1
2
3
4
5
6
7
8
9
10
|
N = int(input())
result = 0
for i in range(1, N+1):
A = list(map(int, str(i)))
result = i + sum(A)
if result == N:
print(i)
break
if i == N:
print(0)
|
cs |
답을 찾아보니 매우 간단했다.
나는 큰 수를 입력받을 수 있어서(<=1,000,000) 범위를 정해줘야 된다고 생각했는데, range(1, N+1)로 입력받은 수 까지 확인해도 2초라는 시간제한에 걸리지 않고 출력이 가능한 모양이다.
1부터 N(입력받은 수)까지의 수를 모두 확인하는데, 각 자리수를 따로 분리해 A라는 list안에 넣는다.
각 자리수를 합한 것과, 그 수를 더해서 N과 같으면 그 수를 출력하고, for 문을 중지한다.
끝까지 확인했는데 나오지 않으면 생성자가 없는 경우이다. 그런 경우에는 0을 출력한다.
처음부터 범위에 대해 고민하지 말고, 알고리즘을 먼저 작성해보는게 좋을 것 같다. 속도가 충분히 나와준다면 굳이 제한할 필요가 없다.
'알고리즘' 카테고리의 다른 글
백준 알고리즘(파이썬) - 1018번 (0) | 2021.08.24 |
---|---|
백준 알고리즘(파이썬) - 7568번 (0) | 2021.08.23 |
백준 알고리즘(파이썬) - 2798번 (0) | 2021.08.23 |
백준 알고리즘(파이썬) - 11729번 (0) | 2021.08.18 |
백준 - 2447번 / map(), join() (0) | 2021.08.17 |