문제
각 자리가 숫자(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 |
댓글