반응형
문제
각 자리가 숫자로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 곱하기 혹은 더하기 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.
곱하기가 더하기의 우선권을 갖지 않고 무조건 왼쪽부터 연산이 진행된다.
입력 조건
첫째줄에 여러개의 숫자로 구성된 하나의 문자열 S
출력 조건
만들어질 수 있는 가장 큰 수
풀이
곱하기 연산과 더하기 연산의 결과가 더 큰 것을 가지고 가도록 생각했음.
왼쪽부터 계산하기 때문에 0번째부터 이웃한 숫자와의 더하기 연산과 곱하기 연산을 비교해
더 큰 경우를 저장해가면서 풀이했음. 그리고 배열의 마지막 인덱스에 저장된 값이 최대 값으로 판단함.
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
sc.close();
int size = s.length();
int[] num = new int[size];
for (int i = 0; i < size; i++) {
// char 형 숫자를 int로 변환
num[i] = s.charAt(i) - '0';
}
System.out.println(Arrays.toString(num));
for(int i = 0; i < size-1; i++) {
int tmp = num[i] + num[i+1];
int tmp2 = num[i] * num[i+1];
if (tmp > tmp2) {
num[i+1] = tmp;
} else {
num[i+1] = tmp2;
}
}
System.out.println(num[size-1]);
} // end main
}
하지만, 코드가 길어지고, 연산의 결과를 계속 수정해야 했음.
이보다 숫자가 0과 1인 경우만 더하기 연산을 하고 나머지는 곱하기 연산을 하도록
코드를 수정함.
import java.util.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
sc.close();
int result = s.charAt(0) - '0';
for(int i = 1; i < s.length(); i++) {
int tmp = s.charAt(i) - '0';
if (tmp <= 1 || result <= 1) {
result += tmp;
} else {
result *= tmp;
}
}
System.out.println(result);
} // end main
}
'Algorithm' 카테고리의 다른 글
[Algorithm] 문자열 뒤집기 (0) | 2021.06.01 |
---|---|
[Algorithm] 뱀 (0) | 2021.05.31 |
[Algorithm] 모험가 길드 (0) | 2021.05.30 |
[Algorithm] 커리큘럼 (0) | 2021.05.29 |
[Algorithm] 도시 분할 계획 (0) | 2021.05.28 |