접근 방법
특별히 어떤 알고리즘을 사용하기보단 아이디어가 필요한 문제였다.
예를 들어 20 - 90 + 100 + 50 - 20 + 15 + 30 -70 이라고 하자. 어떻게 하면 최솟값을 만들 수 있을까?
합이 최소가 되려면 최대한 큰 수를 빼야 한다. 그러려면, 덧셈을 모두 괄호로 묶어서 먼저 계산해준 뒤에 빼주는 것이 최솟값을 만드는 방법이 될 것이다. 즉, 20 - ( 90 + 100 + 50 ) - ( 20 + 15 + 30 ) - 70 이 되어야 한다.
이 것을 코드로 구현하려면
- 문자열을 한 줄로 받아서 split() 함수로 "-" 를 기준으로 나눈다.
- 각 분리된 문자열의 합을 구한다.
- 뺄셈을 계산한다.
주의할 점이 있다면 덧셈을 기준으로 split() 함수를 사용할 때 "\\+"로 구분해야 한다는 것이다. 이걸 못찾아서 한참 헤맸다..
코드
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] part = in.nextLine().split("-");
int answer = 0;
for(int i = 0; i < part.length; i++){
int sum = 0;
String[] add = part[i].split("\\+");
for(int j = 0; j < add.length; j++){
sum += Integer.parseInt(add[j]);
}
if(i == 0) answer += sum;
else answer -= sum;
}
System.out.println(answer);
in.close();
}
}
'알고리즘 > Class 3' 카테고리의 다른 글
백준 BOJ 1676번 (0) | 2022.08.19 |
---|---|
백준 BOJ 1620번 (0) | 2022.08.18 |
백준 BOJ 1463번 (0) | 2022.08.16 |
백준 BOJ 1389번 (0) | 2022.08.16 |
백준 BOJ 1260번 (0) | 2022.08.15 |
댓글