백준 baekjoon

[백준 2231] 분해합

니블 2023. 4. 11. 13:57

23-04-11

완전탐색 ( 브루트포스문제 ) 

문제 고민시간 : 20m 

 

해결과정 

198+1+9+8 = (216)

198은 216의 생성 자

198의 분해합은 216

관건 216만 주어졌을때 가장 작은 생성자인 198을 어떻게 구했느냐 (생성자가 없는 겨우 0 출력)

256의 생성자 245 245+2+4+5 = 256

10분경과. 분해합과 생성자 사이에 연관성을 모르겠음 ;;

 

--> 이러다가 브루트 포스는 그냥 for 문으로 i 부터 시작해서 나가면 될것같다라는 생각듬 ( 이게 맞음 ) 

 

브루트 포스 algor

  1. 선형으로 정리해보자 -> 이문제를 선형으로 어케 ??

코드 

#완전탐색 _ 부분합 

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

답지를 보고도 오류가 계속 났다. 다음날에 다시 해봄 

if n_sum == n : 

      print(n_sum) 으로 계속했던 것임 ;; 

 

후기 

오랜만에 백준 문제 풀기.. 이제 진짜 해야한다 브루트 포스 문제는 일단 걍 for문으로 i 까지 돌리기 

map ( int,str(i)) 이런 라이브러리를 기억하자