λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

μ•Œκ³ λ¦¬μ¦˜ 문제

λ°±μ€€ 1541 - μžƒμ–΄λ²„λ¦° μ•”ν˜Έ [μžλ°”]

* 개인적인 κΈ°λ‘μš©μž…λ‹ˆλ‹€.

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

 

μ™œ 그리디인가?

‘+’와 ‘-‘ 그리고 ‘수’둜 κ΅¬μ„±λœ 식이 μžˆμ„ λ•Œ κ·Έ 식을 μ΅œμ†Œλ‘œ λ§Œλ“œλŠ” 계산법을 μ°ΎλŠ” 것인데, λ§Œμ•½ μ‹μ—μ„œ ‘-‘λ₯Ό λΉΌλŠ” κ²ƒμœΌλ‘œ μƒκ°ν•˜λ©΄ ‘-‘ 식 계산 후에 λ”ν•˜λŠ” 식이 또 μžˆλ‹€λ©΄ ν•„μ—°μ μœΌλ‘œ 결과값이 점점 μ»€μ§€κ²Œ λ©λ‹ˆλ‹€. κ·Έλž˜μ„œ μ΅œμ†Ÿκ°’μ΄ μ ˆλŒ€ 될 수 μ—†μŠ΅λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ ‘-‘λ₯Ό 음수둜 λ°”κΎΈλŠ” κ²ƒμœΌλ‘œ μƒκ°ν•œλ‹€λ©΄ ‘-‘ λ’€μ˜ λ”ν•˜λŠ” 식듀을 μ΄μš©ν•˜μ—¬ μ΅œμ†Ÿκ°’μ„ λ§Œλ“€ 수 있게 λ©λ‹ˆλ‹€! 즉, μŒμˆ˜λŠ” μ ˆλŒ“κ°’μ΄ 클수둝 더 μž‘μ€ κ°’μž„μ„ μ΄μš©ν•˜λŠ” 것이죠. 예λ₯Ό λ“€μ–΄, 10+20-30+40+50+60-70κ³Ό 같은 식이 μžˆλ‹€λ©΄ λ‹€μŒκ³Ό 같이 λ¬Άμ–΄μ£Όμ–΄ 10+20-(30+40+50+60)-70 κ³„μ‚°ν•˜λ©΄ μ΅œμ†Ÿκ°’μ΄ 됨을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

μ •λ¦¬ν•˜μžλ©΄ μ΅œλŒ€ν•œ λ§Žμ€ 수λ₯Ό λ”ν•΄μ„œ(νƒμš•) 음수둜 λ§Œλ“€λ©΄ κ·Έ 값이 μ΅œμ†Ÿκ°’μ΄ λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

 

μ½”λ“œ

// 그리디 - boj.kr/1541 μžƒμ–΄λ²„λ¦° κ΄„ν˜Έ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BOJ_1541 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String exp = br.readLine();
        String[] exps;
        int sum = 0;

        exps = exp.split("\\-");

        for (int i = 0; i < exps.length; i++) {
            int add = 0;
            for (String s : exps[i].split("\\+"))
                add += Integer.parseInt(s);

            if (i > 0)
                sum += (-add);
            else
                sum += add;
        }

        System.out.println(sum);
    }
}