[백준/python] 2231번 : 분해합

김동준·2023년 9월 23일
0
post-thumbnail

알고리즘 분류 브루트포스

🔗 문제 출처 https://www.acmicpc.net/problem/2231


이 문제의 알고리즘 분류는 브루트포스이다. 브루트포스 알고리즘의 특성상 모든 경우의 수를 돌기 때문에 결과적으로는 정확한 해답을 찾을 수 있지만 시간이 오래걸린다는 단점이 있다.

이 문제 또한 for문으로 무작정 답을 찾을 때까지 경우의 수들을 순회한다.



📌 코드

python
n = int(input())

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


입력받은 n까지 순회하기 위해서 for문의 범위를 1부터 n+1로 지정되었다. 최솟값을 찾는 문제였기 때문에 1부터 순회하는 방법을 사용하였다.

이 문제를 풀기 위해서는 숫자의 각 자리수를 효율적으로 더할 수 있어야했다. 그렇기 때문에 sum(list(map(int,str(i))))로 각 자리수를 더했다. i를 str로 감싼 이유는 map의 두 번째 파라미터에는 iterable한 요소를 전달해야 하기 때문이다. 따라서 string으로 변환해준다음 다시 int로 변환을 하여 list화시켰다.

이 값에 i를 더해서 그 값이 입력받은 n과 일치한다면 바로 출력하고 반복문을 빠져나왔다.

만약 끝까지 값을 찾지 못하다 마지막 인덱스인 i와 입력값인 n이 동일해진다면 생성자가 없는 것이기 때문에 0을 출력한다.

profile
동구팔

0개의 댓글

관련 채용 정보