BOJ/백준-2231-python

cosmos·2021년 1월 15일
5
post-thumbnail

문제📖


자연수 N이 주어졌을 때, N의 분해합의 가장 작은 생성자를 구하는 문제이다.

풀이🙏

위 문제를 봤을 때, 풀이 방식이 3개가 떠올랐다.

sol1)
1. 자료형이 숫자형인 N을 입력받는다.
2. len(N)으로 N의 크기에 따른 if문 설정
3. if N == 3자리수라면 (if len(N) == 3)
4. N = result + result/100 + (result%100)10 + ((result%)100)%10
5. 역함수로 result에 대한 식으로 풀어서 result 정의
6. print(result)

sol2)
1. range(1,10000000+1)범위에있는 분해합 생성자를 List에 append한다.
2. N을 입력받았을때, List에 N이 있으면 N번째 인덱스에 -1 한것이 result!
3. print(result)

sol3)
1. for i in range(1,N+1)로 1부터 최대범위까지 모든 경우의 수(브루트 포스)를 처음부터 끝까지 비교한다.
2. N을 str형으로 입력받고 list에 append
3. if i + sum(i) == N 이면, print(i)

브루트 포스 문제는 모든 경우의 수를 고려해야하는 문제이기 때문에 입력받아야할 변수의 range에 답게 1부터 10000000까지의 모든 수를 따지는 for 로 구현하는게 좀 더 편할것같아서 sol3을 택했다!

코드💻

# boj, 2231 : 분해합, python3
N = int(input())
result = 0

for i in range(1, N+1):        
    a = list(map(int, str(i)))  
    s = i + sum(a)              
    if(s == N):                 
        result = i                   
        break

print(result)

결과😎

출처📝

https://www.acmicpc.net/problem/2231

풀코드

github

0개의 댓글