반응형
문제
https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
해결 방법
- 5자리 이상의 수가 입력되지 않고, 식의 길이가 50이하이기 때문에 int 형으로 해결 가능
- 괄호를 사용해 최소값을 만들기 위해서는 빼주는 값을 최대로 만들어 주면 됨
- ex) a + b + c - d + e + f - g - h 라고 가정해보자 ( a ~ h는 양의 정수 )
- 이 결과를 최소로 만들어보면 a + b + c - (d + e + f) - g - h 가 됨
- 정리해보면 - 부호 뒤에 + 부호가 나오면 괄호를 쳐줘서 빼기 연산을 하게 하고 - 부호 뒤에 - 부호가 나오면 괄호를 끝내서 빼기 연산을 하게 하면 됨
- 더 간단하게 생각해보면 처음 - 부호 뒤의 정수들은 모두 빼주면 됨
코드
import java.util.Scanner;
public class p1541 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
str += '=';
int ans = 0;
int temp = 0;
boolean minus = false; // minus가 한번 나오면 그 뒤는 모두 빼줌
for(int i = 0 ; i < str.length() ; i ++) {
char c = str.charAt(i);
if(c >= '0' && c <= '9') {
temp = temp * 10 + (c - '0');
} else {
if(minus == true) {
ans -= temp;
} else {
ans += temp;
if(c == '-') {
minus = true;
}
}
temp = 0;
}
}
System.out.println(ans);
}
}
반응형
'JAVA > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[JAVA] 백준 2162 - 선분 그룹 (0) | 2022.10.26 |
---|---|
[JAVA] 백준 2166 - 다각형의 면적 (0) | 2022.10.08 |
[JAVA] 백준 2188 - 축사 배정 (0) | 2022.08.19 |
[JAVA] 백준 2176 - 합리적인 이동경로 (Reverse Dijkstra + DP) (0) | 2022.08.19 |
[JAVA] 백준 2749 - 피보나치 수 3 (2) | 2022.08.18 |