기타 사이트/이코테

[그리디] 곱하기 혹은 더하기

빙수빈수 2021. 6. 15. 20:00

[문제] 각 자리가 숫가 0~9로만 이루어진 문자열 S가 주어졌을 때, 숫자 사이에 '*', '+'를 삽입하여 만들수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

 

[코드]

import java.util.*;

public class greedy_p312 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		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인 경우는 곱하기 보다는 +를 수행하는 것이 
			 * 결과값을 더 크게 만들며, 첫 번째 값이 들어있는 result도  
			 * 이와 같은 이유로 아래 조건은 설정해준다.
			 */
			if(str.charAt(i)-'0'<=1||result<=1)
				result+=str.charAt(i)-'0';
			else
				result*=str.charAt(i)-'0';
		}
		System.out.println(result);
	}
}

 

[고찰]

 문자열의 값이 1인 경우에도 곱하기가 아닌 더하기를 해야한다는 점만 주의하면 어렵지 않게 해결할 수 있는 문제였다.