122. 곱하기 혹은 더하기
-
각 자리가 숫자 (0부터 9)로만 이루어진 문자열
S
가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에'x'
혹은'+'
연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요.- 단,
'+'
보다'x'
를 먼저 계산하는 일바적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다.
- 단,
예를 들어
02984
라는 문자열이 주어지면, 만들어질 수 있는 가장 큰 수는
(((0 + 2) x 9) x 8 x 4) = 576
입니다.
- 또한 만들어질 수 있는 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어집니다.
-
입력조건
- 첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열
S
가 주어집니다. (1 ≤
S의 길이 ≤ 20)
- 첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열
-
출력조건
- 첫째 줄에 만들어질 수 있는 가장 큰 수를 출력합니다.
1. 그리디 알고리즘
data = list(map(int, input()))
result = data[0]
for n in data[1:]:
if result <=1 or n <= 1:
result += n
else:
result *= n
print(result)
- 두 수에 대하여 연산을 수행할 때, 두 수 중에서 하나라도 1이하인 경우에는 더하며, 두 수가 모두 2 이상인 경우에는 곱한다.
2. C++
#include <bits/stdc++.h>
using namespace std;
string str;
int main(void) {
cin >> str;
// 첫 번째 문자를 숫자로 변경한 값을 대입
long long result = str[0] - '0';
for (int i = 1; i < str.size(); i++) {
// 두 수 중에서 하나라도 '0' 혹은 '1'인 경우, 곱하기보다는 더하기 수행
int num = str[i] - '0';
if (num <= 1 || result <= 1) {
result += num;
}
else {
result *= num;
}
}
cout << result << '\n';
}
3. Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
// 첫 번째 문자를 숫자로 변경한 값을 대입
long result = str.charAt(0) - '0';
for (int i = 1; i < str.length(); i++) {
// 두 수 중에서 하나라도 '0' 혹은 '1'인 경우, 곱하기보다는 더하기 수행
int num = str.charAt(i) - '0';
if (num <= 1 || result <= 1) {
result += num;
}
else {
result *= num;
}
}
System.out.println(result);
}
}
Author And Source
이 문제에 관하여(122. 곱하기 혹은 더하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@corone_hi/122.-곱하기-혹은-더하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)