[코딩테스트] 백준 1541 자바

Henson·2025년 5월 27일

코딩테스트

목록 보기
17/50
post-thumbnail

백준 1541

백준 1541 문제

백준 1541 문제

import java.util.*;

public class Boj1541 {

    static int answer = 0;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String expression = sc.nextLine(); // 식 입력 받기
        String[] expressions = expression.split("-"); // 최소값을 구하기 위해서는 -의 뒤에 값이 커야하기에 - 기준으로 나누기

        for (int i = 0; i < expressions.length; i++) {
            int sum = mySum(expressions[i]); // - 뒤에 값을 합
            if (i == 0) { // 모두 양수이기 떄문에 맨 앞의 수는 무조건 더한다.
                answer = answer + sum;
            } else { // 그 외에 수는 뺀다.
                answer = answer - sum;
            }
        }

        System.out.println(answer);
    }

    // -의 뒤의 수를 최댓값으로 만들기 위해 앞의 -와 뒤의 -사이에 괄호를 넣어 그 최댓값을 계산하는 메서드
    private static int mySum(String expression) {
        int sum = 0;
        String[] numbers = expression.split("\\+"); // split 메서드를 사용할 때 regex에 "+"를 넣으면 에러 발생하기 떄문에 "\\+" 혹은 "[+]" 넣기
        for (int i = 0; i < numbers.length; i++) {
            sum += Integer.parseInt(numbers[i]);
        }
        return sum;
    }
}

해당 문제는 주어진 식에 괄호를 사용하여 최솟값으로 만드는 문제이기에 - 뒤에 수들을 괄호로 묶어주면 되는 문제이다.

풀이

  1. 문자열로 받은 식을 expression 변수에 할당한다.
  2. -뒤에 수를 최댓값으로 만들어주기 위해 splie("-")으로 -을 기준으로 문자열을 나눈다.
  3. 나누어진 expressions 배열의 크기만큼 반복을 하면서 -의 뒤에 수들(괄호로 묶은 수들)의 합을 구하는 mySum() 메서드를 호출하여 합을 구한다.
  4. 수는 모두 양수이기에 if문을 통해 answer에 첫 식은 더해준다.
  5. 그 외에 식들은 모두 빼준다.
  6. answer를 출력한다.

split("+")처럼 +를 기준으로 문자열를 나누면 Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 0 + 에러가 발생한다.

에러가 발생하지 않기 위해서는 split("\\+") 혹은 split("[+]")를 사용하면 된다.

profile
세계 최고의 개발자가 되고 말겠어.

0개의 댓글