수학, 그리디 알고리즘, 문자열, 파싱
잃어버린 괄호 : Silver2
https://www.acmicpc.net/problem/1541
** 최소값을 구하려면 - 부호가 붙은 수가 커야 한다.
1. 입력받은 문자열을 - 부호를 기준으로 토큰으로 나눈다.
2. 분리한 토큰에서 + 부호를 기준으로 분리해서 합산한다.
3. 첫번째 값에서부터 합산한 값들을 차례대로 빼면 된다.
4. 첫번째 수에 0이 올수 있기 때문에 sum의 초기값은 0이 아니어야 한다.
풀이
import java.io.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static void main(String[] args) throws IOException {
int sum = Integer.MAX_VALUE; // 초기 상태 여부 확인을 위한 값으로 설정
String[] subNum = br.readLine().split("-");
for (int i = 0; i < subNum.length; i++) {
int tmp = 0;
// 뺄셈으로 나뉜 토큰을 덧셈으로 분리하여 해당 토큰들을 더한다.
String[] addNum = subNum[i].split("\\+");
// 덧셈으로 나뉜 토큰들을 모두 더한다.
for (int j = 0; j < addNum.length; j++) {
tmp += Integer.parseInt(addNum[j]);
}
// 첫 번째토큰인 경우 tmp값이 첫 번째 수가 됨
if (sum == Integer.MAX_VALUE) {
sum = tmp;
} else {
sum -= tmp;
}
}
bw.write(sum + "\n");
bw.flush();
br.close();
bw.close();
}
}
int sum = Integer.MAX_VALUE;
ㄴ 초기 상태 여부를 확인하기 위한 변수로, 최댓값으로 설정한다.
String[] sub = br.readLine().split("-");
ㄴ 입력으로 주어진 식을 "뺄셈"을 기준으로 분리한다.
for (int i = 0; i < sub.length; i++) {
ㄴ 분리된 각 토큰에 대해 반복한다.
int tmp = 0;
ㄴ현재 토큰의 값을 저장할 임시 변수를 초기화한다.
String[] add = sub[i].split("\\+");
ㄴ 현재 토큰을 덧셈을 기준으로 분리한다.
for (int j = 0; j < add.length; j++) {
ㄴ 분리된 각 덧셈 토큰에 대해 반복한다.
tmp += Integer.parseInt(add[j]);
ㄴ 덧셈 토큰을 정수로 변환하여 임시 변수에 더한다.
if (sum == Integer.MAX_VALUE) {
sum = tmp;
} else {
sum -= tmp;
}
ㄴ 현재 토큰을 처리하여 최종 결과 값을 계산한다.
ㄴ 만약 처음 토큰이라면, 임시 변수 값을 최종 결과 값으로 설정하고, 그렇지 않으면 임시 변수 값을 최종 결과 값에서 뺀다.
'코딩테스트 > programming_JAVA' 카테고리의 다른 글
[Java] baekjoon_1271 : 엄청난 부자2 (1) | 2024.03.01 |
---|---|
[Java] baekjoon_11286 : 절댓값 힙 (1) | 2024.02.16 |
[Java] baekjoon_11279 : 최대 힙 (1) | 2024.02.12 |
[Java] baekjoon_14940 : 쉬운 최단거리 (0) | 2024.02.11 |
[Java] baekjoon_11724 : 연결 요소의 개수 (1) | 2024.02.10 |