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

 

 

#문제 간단 정리

 

N 이 주어지고 

N 이하의 숫자들에서

 

각 자리수를 곱햇을때 가장 커지는 숫자를 찾는 문제

 

#문제 해결 방법

 

N 이하의 숫자들의 자리수의 곱의 최대라는 말은

4876이면 4 *  8 * 7 * 6  이렇게 곱할 수 있고

4876 이하의 숫자인 3999도

곱해서 3 * 9 * 9 * 9 를 곱해서 최대값을 찾을 수 있다.

 

여기서 쉽게 생각 할 수 있는건 9를 최대한 많이 만든다는건데

 

일단 어떤 자리수를 1내리면 그 뒤에 숫자들은 전부 9로 만들수 있다.

 

때문에 각 자리수를 한번씩 1 내리고 그 뒤에수를 전부 9로 만들어 주면서

 최대값을 찾아주면 된다.

 

#전체 코드

#include <iostream>
#include <unordered_map>
#include <vector>
using namespace std;

typedef long long ll;

int main() {



    string s;
    cin >> s;

    ll startMax = 1;

    for (int i = 0; i < s.length(); i++) {
        
        if (s[i] - '0' != 0) {
            startMax *= s[i] - '0';
        }
    }



    for (int i = 0; i < s.length(); i++) {

        ll tempMax = 1;
        if (s[i] - '0' - 1 != 0) { //1 내려서 0이면 곱하지 않고 넘어감
            tempMax *= s[i] - '0' - 1;
        }

        for (int j = i + 1; j < s.length(); j++) { //이후 자리수들 전부 9로 만들기

            tempMax *= 9;

        }

        for (int t = 0; t < i; t++) { //이전자리수들 곱해주기
            if(s[t] - '0' != 0)
                tempMax *= s[t] - '0';

        }

        startMax = max(tempMax, startMax);
    }

    cout << startMax << '\n';

    return 0;
}

'[백준] > C++' 카테고리의 다른 글

백준 4040번 Polar Bear [C++]  (1) 2024.09.21
백준 31747번 점호 [C++]  (0) 2024.09.16
백준 16624번 Bingo Ties [C++]  (0) 2024.09.13
백준 9764번 서로 다른 자연수의 합 [C++]  (0) 2024.09.13
백준 4358번 생태학 [C++]  (0) 2024.09.13

+ Recent posts