-
1541번: 잃어버린 괄호
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다
www.acmicpc.net
문제
세준이는 양수와 +, -, 그러고 괄호를 가지고 식을 만들었다. 그러고 나서 세준이는 괄호를 모두 지웠다.
그러고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
조건
[입력]
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
[출력]
첫째 줄에 정답을 출력한다.
풀이
해당 문제는 연산 식이 주어졌을 때 괄호를 통해 연산을 최소로 만드는 결괏값을 구하는 문제다.
연산이 + - 연산만 주어지기 때문에 잘 생각해본다면 최솟값을 만들기 위해서는 큰 수를 -연산할수록 최솟값이 만들어진다.
즉 +연산을 먼저 진행하고 -연산을 수행한다면 최솟값을 구할 수 있다.
로직은 아래와 같다.
1. 먼저 입력값을 처리하면서 -기준으로 파싱 한다
2. -기준으로 파싱 한 값을 +기준으로 파싱 하고 연산한다
2-1. 이때 최초 1회에 한해서는 값을 저장해준다
2-2 이후 값들은 모두 - 연산을 한다.
코드
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer sub = new StringTokenizer(br.readLine(),"-"); // -를 기준으로 자른다 boolean first = true; // 첫번째 확인 int ans = 0; // 최종 계산값 저장 while (sub.hasMoreTokens()) { StringTokenizer add = new StringTokenizer(sub.nextToken(), "+"); // -로 짜른것중에 +로 짤라서 연산 int sum = 0; while (add.hasMoreTokens()) { sum += Integer.parseInt(add.nextToken()); } if(first) { // 첫번째는 그냥 저장을 해준다 이후 값들에대해선 - 연산 ans = sum; first = false; } else ans-=sum; } System.out.println(ans); } }
GitHub - JUNGSOONIL/Algorithm-JAVA: 알고리즘 문제 해결 자바 소스 코드
알고리즘 문제 해결 자바 소스 코드. Contribute to JUNGSOONIL/Algorithm-JAVA development by creating an account on GitHub.
github.com
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 1715 카드 정렬하기 JAVA (0) 2022.06.21 Baekjoon 2217 로프 JAVA (0) 2022.06.20 Baekjoon 16958 텔레포트 JAVA (0) 2022.06.16 Baekjoon 21736 헌내기는 친구가 필요해 JAVA (0) 2022.06.14 Baekjoon 4577 소코반 JAVA (0) 2022.06.13 댓글