BaekJoon 1541 문자열 처리

 이번 문제는 잃어 버린 괄호라는 문제입니다. 보통 괄호문제는 스택과 관련이 있는 문제들이 많지만 이번에는 아닌 것 같아요. 문제 주소는 밑에 있으니 확인해보세요^^

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

최소 값을 만드는 방법은 앞에서 부터 체크하면서 - 뒤에 (를 치고 다음 - 이전에 )를 닫는 방법입니다 . 예를 들면


12 - 34 + 12 + 13 + 33 - 44

이렇게 있다고 하면 다음과 같이 만드는게 최소가 되겠지요?

12 -( 34  + 12 + 13 + 33 ) - 44

이문제는 문자열을 처리하는데 좀 까다로운 문제라고 생각해요 다음은 제가 짠 코드입니다.



 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import java.util.Arrays;
import java.util.Scanner;

public class BaekJoon1541 {
    static String str;
    static char[] chars = new char[10];
    static String[] strs = new String[55];
    static String[] numbers = new String[55];
    static boolean isMinus;
    static int Answer, o, m, sLength, t;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        isMinus = false;Arrays.fill(numbers, "");
        str = sc.nextLine();o = 0;m = 0; t = 1;
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) == '-' || str.charAt(i) == '+') {
                // 연산자라면 strs[]의 홀수 index에 부호를 위치 시킴
                strs[t] = "" + str.charAt(i);
                t += 2;
                for (int j = 0; j < o; j++) {
                    //숫자를 numbers[]에 순서대로 넣음
                    numbers[m] += chars[j];
                }
                m++;
                o = 0;
            }else {// 연산자가 아니라면 chars[] 숫자를 누적시킴, 하나의 숫자가 들어감
                chars[o++] = str.charAt(i);
            }
        }
        for (int i = 0; i < o; i++) {
            numbers[m] += chars[i];
        }
        m++;
        for (int i = 0; i < m; i++) {
            strs[i * 2] = numbers[i];
        }
        sLength = m * 2 - 1;
        // 숫자와 부호가 구별되는 String array가 만들어짐
        Answer = Integer.parseInt(strs[0]);
        for (int i = 1; i < sLength; i++) {
            if (isMinus) {
                if (strs[i - 1].equals("+")) {
                    Answer -= Integer.parseInt(strs[i]);
                } else if (strs[i - 1].equals("-")) {
                    Answer -= Integer.parseInt(strs[i]);
                }
            }else {
                if (strs[i - 1].equals("+")) {
                    Answer += Integer.parseInt(strs[i]);
                }else if (strs[i - 1].equals("-")){
                    isMinus = true;
                    Answer -= Integer.parseInt(strs[i]);
                }
            }
        }
        System.out.println(Answer);
    }
}


이 블로그의 인기 게시물

웹툰 무료로 볼 수 있는 사이트

BackJoon 1011, Fly me to the alpha centauri, 규칙 찾기 문제

BaekJoon 6591, 이항 쇼다운 조합문제