https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
문제 설명
양수와 +,- 그러고 괄호를 가지고 식을 만들었다. 그러고 나서 세준이는 괄호를 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

💡 아이디어
+와 -로만 이루어진 식에서 가장 작은 수를 만들기 위한 방법을 생각해봐야 합니다.
+를 먼저 계산해서 가장 큰 수를 만든 후에, -를 계산하면 가장 큰 수를 빼게 되기 때문에 가장 작은 수를 만들 수 있습니다.
전체 코드
import java.util.*;
public class Main {
static ArrayList<Integer> num;
static ArrayList<Character> sign;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s = new Scanner(System.in);
String str = s.next();
num = new ArrayList<>();//숫자 순서대로 저장
sign = new ArrayList<>();//부호 저장.
int idx=0;
for(int i=0;i<str.length();i++) {
if(str.charAt(i)<'0' || str.charAt(i)>'9') {//기호를 만났을 때
//idx~기호 이전까지 숫자를 저장
num.add(Integer.parseInt(str.substring(idx,i)));
idx=i+1;
//기호 저장
sign.add(str.charAt(i));
}
}
//마지막 숫자 저장.
num.add(Integer.parseInt(str.substring(idx)));
calculate('+');
calculate('-');
System.out.println(num.get(0));
}
// ss기호를 계산한다.
static void calculate(char ss) {
int idx=0;
while(idx<sign.size()) {
if(sign.get(idx)==ss) {
//더하기
if(ss=='+') num.add(idx,num.remove(idx)+num.remove(idx));
//빼기
else num.add(idx, num.remove(idx)-num.remove(idx));
sign.remove(idx);
}
else idx++;//계산해야 하는 기호가 아니라면 다음 기호 가져오기.
}
}
}'Algorithms(CT) > Baekjoon' 카테고리의 다른 글
| [백준][Java] 29729. 가변 배열 (0) | 2025.01.09 |
|---|---|
| [백준] 14719. 빗물 (자바) (1) | 2023.09.27 |
| [백준] 2457. 공주님의 정원 (Java) (0) | 2023.08.01 |
| [백준] 2606. 바이러스 (java) (0) | 2023.07.18 |
| [백준] 2644. 촌수계산 (Java) (0) | 2023.07.15 |