[BOJ / Python] 2231 분해합

도니·2023년 4월 13일
0

BOJ / Python

목록 보기
77/104
post-thumbnail

문제

백준 2231 분해합

코드

#BOJ 2231 분해합

n = int(input())

for i in range(1, n+1):
    tmp = list(map(int, str(i)))
    result = i + sum(tmp)
    if result == n:
        print(i)
        break

    if i == n:
        print(0)

코드 설명

각 자리 숫자의 합을 어떻게 구할까?

해당 문제를 풀면서 가장 어려웠던 부분은 각 자리 숫자의 합을 어떻게 구하는지였다. 몇자리 숫자인지 알면 나눗셈 연산자(/)와 나머지 연산자(%)를 이용하여 구할 수 있지만, 위 문제의 경우에는 n이 몇자리 숫자인지 알 수 없었기 때문이다.

💡 그렇다면 n을 문자로 바꿔서 리스트에 넣어보자!

그래서 고안한 방법은 숫자를 문자로 바꾼 다음 리스트에 넣는 방식이다.

tmp = list(map(int, str(i)))

위와 같이 임시 리스트 tmp에 숫자 i를 문자열로 바꾼 다음, int형으로 맵핑시켜서 리스트에 넣어준다. 그러면 sum() 함수를 이용하여 각 자리 숫자의 합을 손쉽게 구할 수 있다.

분해합 resultn과 같다면 해당 숫자가 n의 생성자이므로 해당 숫자를 출력하고 반복문을 빠져나간다. 이때, for문을 1부터 하나씩 더해가며 반복하였기 때문에 처음 나온 생성자가 곧 가장 작은 생성자이다.
만약 숫자i가 n과 같아진다면 생성자를 찾지 못한 것이므로 0을 출력한다.

profile
안녕하세요, 🌱새싹개발자 도니💡입니다!

0개의 댓글

관련 채용 정보