곱하기 혹은 더하기

김보현·2022년 2월 14일
0

문제

각 자리가 숫자(0~9)로 이루어진 문자열 S
왼쪽부터 순서대로 +,* 연산 이루어짐
만들 수 있는 가장 큰수

예)
S = 02984
만들 수 있는 가장 큰 수 = ((((0 + 2) x 9) x 8) x 4) = 576

입력

문자열 S(1<=S<=20)

출력

만들 수 있는 가장 큰 수

풀이

0이나 1은 곱했을 때보다 더했을 때 큰 수를 만들 수 있음
-> 0과 1은 더하고 이외의 수는 곱하기

#include<iostream>
#include<string>

using namespace std;

int main() {
	string s;
	cin >> s;

	int total = 0;
	int first = s[0] - '0';


	if (s.size() >= 2) {
		int second = s[1] - '0';

		//맨 앞 두 숫자 비교해서 더하거나 곱하기
		if (first == 0 || first == 1 || second == 0 || second == 1) {
			total += (first + second);
		}
		else {
			total += (first * second);
		}
		//3번째 숫자부터는 0이나 1인 경우 더하기, 아닌 경우 곱하기
		for (int i = 2; i < s.size(); i ++) {
			int next = (s[i] - '0');
			if (next == 1 || next == 0) {
				total += next;
			}
			else {
				total *= next;
			}
		}
	}
	else {//숫자가 1개만 있는 경우
		total += first;
	}
	
	cout << total<<"\n";
	return 0;
}
profile
📈어제보다 조금 더 성장하는 오늘을 위해

0개의 댓글