희렌버핏
[백준] 1541 잃어버린 괄호 - JAVA 본문
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 길이가 최대 50인 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다.
출력
첫째 줄에 정답을 출력한다.
내 코드 (144ms)
- 큰 수를 뺄수록 최소값이 나온다.
- '-'를 기준으로 문자열을 분리한다.
- '+'가 있으면 덧셈을 해준다.
- 전체 요소들을 합쳐준다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), "-");
int size = st.countTokens();
String[] strArray = new String[size];
for(int i=0; i<size; i++) {
strArray[i] = st.nextToken();
if(strArray[i].indexOf("+") != -1) {
int ele = 0;
for(String num : strArray[i].split("\\+")) {
ele += Integer.parseInt(num);
}
strArray[i] = Integer.toString(ele);
}
}
int sum = Integer.parseInt(strArray[0]);
for(int i=1; i<size; i++) {
sum -= Integer.parseInt(strArray[i]);
}
System.out.println(sum);
}
}
다른사람 코드 (128ms)
- StringTokenizer가 아닌 split을 썼다.
- '+'가 없어도 무조건 배열에 split 해서 저장했다.
- 기존 배열을 바꾸지 않고 새로운 배열을 만들어 저장했다. (새로운 배열이 int형이라 string으로 다시 바꿀 필요가 없어졌다.)
=> 형변환을 적게 해주는 것도 좋은 것 같다.
import java.lang.Math;
import java.io.*;
import java.util.*;
class Main {
public static void main(String[ ] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
String[] cal = s.split("-");
int[] number = new int[cal.length];
for(int i=0; i<cal.length; i++){
if(cal[i].contains("+")){
String[] temp = cal[i].split("\\+");
for(int j=0; j<temp.length; j++){
number[i]+=Integer.parseInt(temp[j]);
}
}
else{
number[i] = Integer.parseInt(cal[i]);
}
}
int sum = number[0];
for(int i=1; i<number.length; i++){
sum-=number[i];
}
System.out.println(sum);
}
}
'Web > 알고리즘' 카테고리의 다른 글
[백준] 2217 로프 - JAVA (0) | 2020.11.29 |
---|---|
[백준] 5585 거스름돈 - JAVA (0) | 2020.11.25 |
[백준] 11399 ATM - JAVA (0) | 2020.11.24 |
[백준] 1931 회의실 배정 - JAVA (0) | 2020.11.24 |
[백준] 11047 동전 - JAVA (0) | 2020.11.23 |