문제
왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 사이에 '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;
}
문제
왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 사이에 '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; }