πŸ’»

[λ°±μ€€] 브루트포슀 - 2231. λΆ„ν•΄ν•© λ³Έλ¬Έ

μ•Œκ³ λ¦¬μ¦˜/λ¬Έμ œν’€μ΄ Baekjoon

[λ°±μ€€] 브루트포슀 - 2231. λΆ„ν•΄ν•©

λ˜νš¨λ‹ˆ 2020. 2. 1. 16:59

문제

μ–΄λ–€ μžμ—°μˆ˜ N이 μžˆμ„ λ•Œ, κ·Έ μžμ—°μˆ˜ N의 뢄해합은 Nκ³Ό N을 μ΄λ£¨λŠ” 각 자리수의 합을 μ˜λ―Έν•œλ‹€. μ–΄λ–€ μžμ—°μˆ˜ M의 뢄해합이 N인 경우, M을 N의 μƒμ„±μžλΌ ν•œλ‹€. 예λ₯Ό λ“€μ–΄, 245의 뢄해합은 256(=245+2+4+5)이 λœλ‹€. λ”°λΌμ„œ 245λŠ” 256의 μƒμ„±μžκ°€ λœλ‹€. λ¬Όλ‘ , μ–΄λ–€ μžμ—°μˆ˜μ˜ κ²½μš°μ—λŠ” μƒμ„±μžκ°€ 없을 μˆ˜λ„ μžˆλ‹€. λ°˜λŒ€λ‘œ, μƒμ„±μžκ°€ μ—¬λŸ¬ 개인 μžμ—°μˆ˜λ„ μžˆμ„ 수 μžˆλ‹€.

μžμ—°μˆ˜ N이 μ£Όμ–΄μ‘Œμ„ λ•Œ, N의 κ°€μž₯ μž‘μ€ μƒμ„±μžλ₯Ό κ΅¬ν•΄λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

 

μž…λ ₯

첫째 쀄에 μžμ—°μˆ˜ N(1 ≤ N ≤ 1,000,000)이 주어진닀.

 

좜λ ₯

첫째 쀄에 닡을 좜λ ₯ν•œλ‹€. μƒμ„±μžκ°€ μ—†λŠ” κ²½μš°μ—λŠ” 0을 좜λ ₯ν•œλ‹€.

 

예제 μž…λ ₯1

216

 

예제 좜λ ₯1

198

 

생각

μ²˜μŒμ— 문제λ₯Ό λ΄€μ„λ•Œ λ‚˜λˆ—μ…ˆμœΌλ‘œ 풀릴 κ±° κ°™μ•˜λ‹€. κ·Έλž˜μ„œ λͺ«κ³Ό λ‚˜λ¨Έμ§€ κ΅¬ν•˜κΈ° 문제둜 생각을 ν•˜κ³  divide() ν•¨μˆ˜λ₯Ό κ΅¬ν˜„ν–ˆλ‹€. κ·ΈλŸ¬λ‹€κ°€ νƒ€μž„μ•„μ›ƒμ΄ 날꺼같은 λΆˆμ•ˆκ°μ— for문의 인덱슀λ₯Ό nλΆ€ν„° μ‹œμž‘ν•˜λ €κ³  ν–ˆλŠ”λ°, 문제λ₯Ό λ‹€μ‹œ λ΄€λ”λ‹ˆ κ°€μž₯ μž‘μ€ μƒμ„±μžλ₯Ό κ΅¬ν•˜λŠ” 것이기 λ•Œλ¬Έμ— λ‹€μ‹œ 0λΆ€ν„° μ‹œμž‘ν•˜λŠ” κ²ƒμœΌλ‘œ λ°”κΎΈκ³  μ œμΆœν–ˆλ‹€. 

그런데, ν‹€λ ΈμŠ΅λ‹ˆλ‹€... μ•„λ‹ˆ μ™œ?!! μ—¬κΈ°μ„œ λ˜ν•œλ²ˆ 문제λ₯Ό μ œλŒ€λ‘œ 읽지 μ•Šμ€ μ‹€μˆ˜λ₯Ό λ°œκ²¬ν–ˆλ‹€. 좜λ ₯μ—μ„œ μƒμ„±μžκ°€ μ—†λŠ” κ²½μš°μ—λŠ” 0을 좜λ ₯ν•΄μ•Όλœλ‹€λŠ” μ‘°κ±΄μ΄μ—ˆλ‹€. κ·Έλž˜μ„œ flagλ₯Ό μ„ μ–Έν•΄μ„œ 찾지 λͺ»ν•œ 경우 0을 좜λ ₯ν•˜κ²Œλ” κ³ μ³€λ‹€.

flagλ₯Ό false둜 μ„ μ–Έν•˜κ³  μ°Ύμ•˜μ„λ•Œ true둜 ν•˜λŠ” 것보닀 flagλ₯Ό true둜 ν•˜λŠ” 것이 μ‹œκ°„μ„ 더 λ‹¨μΆ•μ‹œν‚¬μˆ˜ μžˆλ‹€.(4ms)

 

μž‘μ„±ν•œ μ½”λ“œ

#include <iostream>
using namespace std;

int s,r;
int n;
bool flag = true;
int divide(int m, int sum){
    s = m/10;
    r = m%10;

    if(s!=0){
        sum += r;
        return divide(s, sum);
    }else{
        sum += r;
    }
    return sum;
}
int main(int argc, const char * argv[]) {
    // insert code here...
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n;
    int result;

    for(int i=0; i<n; i++){
        result = divide(i, i);
    
        if(result == n){
            cout << i <<"\n";
            flag = false;
            break;
        }
    }
    
    if(flag){
        cout << 0 <<"\n";
    }

    return 0;
}
λ°˜μ‘ν˜•
Comments