Study(진행중)/항해99

99클럽 코테 스터디 30일차 TIL / 잃어버린괄호(백준)

Ski_ 2024. 8. 20. 23:32

오늘의 학습 키워드

   - 알고리즘

   - 그리디

공부한 내용 본인의 언어로 정리하기

https://www.acmicpc.net/problem/1541

그리디 알고리즘을 이용한 문제를 풀었다. 아이디어가 가장 어려웠지만 아이디어를 떠올린 이후로는 풀 만 했다.

 

풀이 과정은 다음과 같다.

1. '-'를 기준으로 문자열 파싱

2. 파싱된 문자열들을 '+'를 기준으로 파싱 후 모두 합산

2 - 1. 그러면 모든 덧셈 연산은 완료된 상태

ex) 10 + 20 - 30 + 40 -> 30 - 70

3. 위 상태에서 첫 번째 숫자를 제외한 모든 숫자들을 빼주면 최소값

 

풀이는 다음과 같다.

import java.util.*;
import java.io.*;


public class Main {

    static StringTokenizer st;
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    static StringBuffer sb = new StringBuffer();

    public static void main(String args[])throws IOException {

        String[] splitMinus = br.readLine().split("-");

        int splitMinusLen = splitMinus.length;
        String[][] splitPlus = new String[splitMinusLen][];
        int[] sumSplitMinus = new int[splitMinusLen];

        for (int i = 0; i < splitMinusLen; i++) {
            splitPlus[i] = splitMinus[i].split("\\+");
            for (int j = 0; j < splitPlus[i].length; j++) {
                sumSplitMinus[i] += Integer.parseInt(splitPlus[i][j]);
            }
        }

        int minSum = sumSplitMinus[0];

        for (int i = 0; i < splitMinusLen; i++) {
            minSum -= sumSplitMinus[i];
        }


        System.out.println(minSum);
    }
}
반응형