더하기 혹은 곱하기 (그리디 알고리즘)
더하기 혹은 곱하기 (그리디 알고리즘)
[문제1] 곱하기 혹은 더하기#
[문제] 곱하기 혹은 더하기 : 문제 설명#
각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 ‘x’ 혹은 ‘+’ 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성. 단, + 보다 x를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정.
- 예를 들어, 02984라는 문자열로 만들 수 있는 가장 큰 수는 ((((0 + 2)x 9)x 8)x 4) = 576이다.
- 또한 만들어질 수 있는 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어짐.
[문제] 조건#
입력조건 첫째 줄에 여러개의 숫자로 구성된 하나의 문자열 S가 주어집니다.(1<=S의 길이 <=20)
출력조건 첫째 줄에 만들어 질 수 있는 가장 큰 수를 출력합니다.
입력예시
02984
출력예시
576
- 문자열 내 연산자 계산 가능 메소드
eval()
result = eval('(3+5)*7')
print(result) # 56
- 리스트 내 item들을 하나의 문자열로 만들어주는 메소드
list = ['a', 'b', 'c']
print(''.join(list)) # print: abc
- 리스트에 item 추가 시, 위치 선정이 가능토록하는 메소드
# list = ['a', 'b', 'c']
list.insert(0, "new")
print(list) # ['new', 'a', 'b', 'c']
sum_or_multiply.py#
s = input()
result=0
for n in list(s) :
if result == 0 or n == 0 or result == 1 or n == 1 :
result += int(n)
else :
result *= int(n)
print(result)
모범답안 파이썬#
data = input()
result = int(data[0])
for i in range(1,len(data)) :
num = int(data[i])
if num <= 1 or result <= 1:
result += num
else:
result *= num
print(result)
SumOrMultiply.java#
package ex.Algorithm.greedy;
import java.util.Scanner;
public class SumOrMultiply {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int result = 0;
for (int i = 0; i < s.length(); i++) {
int n = Integer.parseInt(s.substring(i, i+1));
if(result == 0 || n == 0 || result == 1 || n == 1) {
result += n;
}else {
result *= n;
}
}
System.out.println(result);
}
}
모범답안 자바#
package ex.Algorithm.greedy;
import java.util.Scanner;
public class SumOrMultiply {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
long result = str.charAt(0) - '0';
for(int i=1; i < str.length();i++) {
int num = str.charAt(i) - '0';
if (num <= 1 ||result <= 1) {
result += num;
}else {
result *= num;
}
}
System.out.println(result);
}
}
[문제] 정당성 분석#
곱하는 것보다 더하는 것이 더 큰 값을 얻을 수 있다. 곱해서 0또는 1이되는 상황보다, 곱하는게 큰 값을 얻는다
이 자료는 나동빈님의 이코테 유튜브 영상을 보고 정리한 자료입니다.
참고 : www.youtube.com/watch?v=m-9pAwq1o3w&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC