https://www.acmicpc.net/problem/1541
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
👉 풀이
- 최솟값을 만들기 위해서는 큰수를 빼주어야한다 => 덧셈으로 이루어진 부분을 먼저 계산한뒤 덧셈결과를 빼준다.
- 뺄셈이 덧셈보다 뒤에 있는 경우 먼저하고 더하나 더하고 빼나 똑같음
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// https://www.acmicpc.net/problem/1541
// 최솟값을 만들기 위해서는 큰수를 빼주어야한다 => 덧셈으로 이루어진 부분을 먼저 계산한뒤 덧셈결과를 빼준다.
// (뺄셈이 덧셈보다 뒤에 있는 경우 먼저하고 더하나 더하고 빼나 똑같음)
public class p1541 {
public int solution(String str){
int sum = Integer.MAX_VALUE;
String[] tokenArrByMinus = str.split("-");
for(String token : tokenArrByMinus){
String[] tokenArrByPlus = token.split("\\+"); // + 문자가 메타문자(meta character), \ 단독으로 사용할 수 없음
int temp = 0;
for(String t: tokenArrByPlus){
temp += Integer.parseInt(t);
}
if(sum == Integer.MAX_VALUE) sum = temp; // tokenArrByMinus의 첫번째 토큰인 경우 temp가 첫번째 수
else sum -= temp;
}
return sum;
}
// https://dev-coco.tistory.com/94
public int solution2(String str){
int sum = Integer.MAX_VALUE;
StringTokenizer stMinus = new StringTokenizer(str,"-");
while (stMinus.hasMoreTokens()){ // 남아있는 토큰이 있으면 true를 리턴, 더 이상 토큰이 없으면 false 리턴
String token = stMinus.nextToken(); // 객체에서 다음 토큰을 반환
StringTokenizer stPlus = new StringTokenizer(token, "+");
int temp = 0;
while (stPlus.hasMoreTokens()){
temp += Integer.parseInt(stPlus.nextToken());
}
if(sum == Integer.MAX_VALUE) sum = temp;
else sum -= temp;
}
return sum;
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
p1541 problem = new p1541();
System.out.println(problem.solution(str));
System.out.println(problem.solution2(str));
}
}
Source
https://st-lab.tistory.com/148
[백준] 1541번 : 잃어버린 괄호 - JAVA [자바]
www.acmicpc.net/problem/1541 1541번: 잃어버린 괄호 첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개
st-lab.tistory.com
https://dev-coco.tistory.com/94
[Java] StringTokenizer 문자열 분리하기 (split과 차이는 뭘까?)
StringTokenizer 클래스란? StringTokenizer 클래스는 문자열을 구분자를 이용하여 분리할 때 사용할 수 있습니다. 만일 BufferedReader 클래스의 메서드로 입력을 읽어들인다면 라인 단위로 읽어들일 수 밖
dev-coco.tistory.com
'알고리즘 문제풀이 > 자바' 카테고리의 다른 글
[프로그래머스-그리디] 구명보트 JAVA 자바 (0) | 2022.11.21 |
---|---|
[백준-그리디] 13305: 주유소 JAVA 자바 (0) | 2022.11.19 |
[백준-그리디] 11399: ATM JAVA 자바 (0) | 2022.11.19 |
[백준-그리디] 1931: 회의실 배정 JAVA 자바 (0) | 2022.11.18 |
[백준-그리디] 11047번: 동전0 (0) | 2022.11.18 |