코딩테스트

[이코테] 곱하기 혹은 더하기

Patti Smith 2024. 1. 18.

문제

각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 'x' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요. 단, +보다 x를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다.

예를 들어 02984라는 문자열이 주어지면, 만들어질 수 있는 가장 큰 수는 ((((0+2)x9)x8)x4) = 576입니다. 또한 만들어질 수 있는 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어집니다.


 

0부터 9로만 이루어진 문자열이 주어졌을 때 왼쪽부터 확인하며 숫자 사이에 x 또는 +를 하며 최대값을 만드는 문제다.

 

왼쪽까지 계산된 값에 바로 오른쪽 숫자와 곱했을 때 매번 최대값이 되어야 하는데, 곱하기만 하면 최대값이 나올 것 같지만 연산 중 0이나 1일 경우에는 더하기를 해야 최대값을 구할 수 있다.

 

#include <iostream>
using namespace std;

int main()
{
    string data;
    
    cin >> data;
    
    int result = data[0] - 48;
    
    for(int i = 1; i < data.size(); i++){
        int _data = data[i] - 48;
        
        if(_data <= 1 || result <=1) result += _data;
        else result *= _data;
    }
    
    cout << result;

    return 0;
}

'코딩테스트' 카테고리의 다른 글

[이코테] 만들 수 없는 금액  (0) 2024.01.19
[이코테] 문자열 뒤집기  (0) 2024.01.18
[이코테] 모험가 길드  (0) 2024.01.18
[이코테] 큰 수의 법칙  (1) 2024.01.16
[1477] 주유소 세우기  (1) 2024.01.15

댓글