N = int(input())
answer = 0
for i in range(N):
res = sum(list(map(int, str(i))))
if res + i == N:
answer = i
break
print(answer)
유의했던 사항
1. 가장 작은 생성자를 구해야함 → for문을 0부터 1씩 커지게 해서 돌리고, 처음 나온 값에서 break
풀이과정
1. for문으로 1부터 N까지 돌면서 부분합을 구해본다
1-2. 부분합은 i로 부분합을 구하고 그 부분합이 N과 같은지 비교하는 방식으로 구한다
1-3. i를 str으로 해서 각 자릿수를 따로따로 더할 수 있게 만든다
(res는 각 자릿수를 더한 값→i=198이면 res=1+9+8=18)
2. 부분합이 구해졌으면 i를 출력
N = int(input())
flag = False
for i in range(N):
res = i
for s in str(i):
res += int(s)
if res == N:
flag = True
break
else:
flag = False
if flag:
print(i)
else:
print(0)
처음에 이 방법으로 풀었는데, 결과는 "맞았습니다!"가 뜨긴 한다..
근데 마지막 if문에서 i를 어떻게 알고 출력을 했는지 모르겠다...
일단 풀이 방법은 위 풀이법과 똑같은데 sum(list(map(int, str(i)))) 대신 for문으로 각 자릿수를 더해줬다.
그리고 res에 각 자릿수를 더하기 전에 res = i라고 해줬기 때문에 바로 N과 비교했고, flag를 통해 생성자인지 아닌지 판별할 수 있다.
'코테연습문제' 카테고리의 다른 글
[백준/Python] 2751 수 정렬하기2 (0) | 2023.05.05 |
---|---|
[백준/Python]1181 단어정렬 (0) | 2023.05.04 |
[Programmers/Python] 순위 검색 (0) | 2023.04.27 |
[Programmers/Python] 두 큐 합 같게 만들기 (0) | 2023.04.25 |
[Programmers/Python] 괄호 변환 (0) | 2023.04.24 |