문제
왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 사이에 'X' 혹은 '+'를 넣어 만들 수 있는 가장 큰 수 구하기
모든 연산은 왼쪽부터 이뤄진다고 가정
입력 조건
첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S가 주어짐 (1<=S길이<=20)
출력 조건
첫째 줄에 만들어질 수 있는 가장 큰 수를 출력함
입력 예시 | 출력 예시 |
02984 | 576 |
567 | 210 |
풀이
1일 때는 다음 수에 더하고 이 경우를 제외한 모든 수는 곱해야 더 큰 값이 나옴
ex) 123 : (1+2) * 3 = 9
vector에 0을 제거한 숫자를 넣음
num이 1일 경우 다음 수와 더해야 함 (다음 수가 없으면 answer에 더함)
-> 다음 수에 1을 더함
num이 1이 아닐 때 answer에 num을 곱함
맨 처음 answer 값이 1 (처음 수행하는 연산이 곱하기)
- 다음 수가 있으면서 num 값이 1일 경우
- num 값이 1이 아닌 경우
맨 처음 answer 값이 0 (처음 수행하는 연산이 더하기)
- 다음 수가 없는데 num 값이 1일 경우
- 모든 num 값이 0일 경우
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <vector>
using namespace std;
int main() {
char s[21];
int size;
int num1,num2;
long long answer = 0;
int t=1;
vector<int> v;
scanf("%s", s);
size = strlen(s);
for (int i = 0; i < size; i++) {
int num = s[i] - '0';
if (num != 0) {
v.push_back(num);
}
}
for (int i = 0; i < v.size(); i++) {
int num = v[i];
if (num == 1) {
if (i + 1 < v.size()) { //다음 수가 있을 때
v[i + 1] = v[i + 1]++;
if (i == 0) {
answer = 1;
}
}
else {
answer += v[i];
}
}
else {
if (i == 0) { //맨 처음 수가 1이 아닌고 맨 앞일 때
answer = 1;
}
answer *= v[i];
}
}
printf("%lld", answer);
return 0;
}