[백준] 1541번: 잃어버린 괄호

ByWindow·2022년 2월 2일
0

Algorithm

목록 보기
74/104
post-thumbnail

📝 문제

문제를 어떻게 접근해야할지 고민을 좀 했다.
괄호( "(" )를 한 곳에 두고 그리디 방식으로 괄호 ( ")" )를 배치해서 그 값을 모두 비교해야하나? 생각이 들었다.
하지만 우리는 계산 결과의 최소값을 구하고 싶은 것이니까,
어쨋든 -가 나오면 그 바로 뒤의 +는 모두 -로 바꿔주면 되는 것이다.
그리고나서 그 값들을 모두 더하기 연산으로 더해주면 최소값이 된다.

📌 코드

package Baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ1541 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String l = br.readLine();
        int[] nums = new int[50];
        int pm = 1;
        int cur = 0;
        int cnt = 0;
        for(int i = 0; i < l.length(); i++){
            // numeric? make number
            if(0 <= l.charAt(i)-'0' && l.charAt(i)-'0' <= 9){
                cur = cur * 10 + l.charAt(i)-'0';
                if(i == l.length()-1) nums[cnt] = cur * pm;
            }
            else{
                // save number
                nums[cnt] = cur * pm;
                cur = 0;
                cnt++;
                pm = l.charAt(i) == '-' ? -1 : 1;
            }
        }
        // - 바로 뒤에 +가 있다면 그 수는 -로 바꾸기
        for(int i = 1; i < nums.length; i++){
            if(nums[i-1] < 0 && nums[i] > 0){
                nums[i] *= -1;
            }
        }
        int answer = 0;
        for(int i: nums){
            answer += i;
        }
        System.out.println(answer);
    }
}
profile
step by step...my devlog

0개의 댓글