본문 바로가기
알고리즘/Class 3

백준 BOJ 1541번

by edvedv 2022. 8. 18.


접근 방법

 

특별히 어떤 알고리즘을 사용하기보단 아이디어가 필요한 문제였다.

 

예를 들어 20 - 90 + 100 + 50 - 20 + 15 + 30 -70 이라고 하자. 어떻게 하면 최솟값을 만들 수 있을까?

합이 최소가 되려면 최대한 큰 수를 빼야 한다. 그러려면, 덧셈을 모두 괄호로 묶어서 먼저 계산해준 뒤에 빼주는 것이 최솟값을 만드는 방법이 될 것이다.  즉, 20 - ( 90 + 100 + 50 ) - ( 20 + 15 + 30 ) - 70 이 되어야 한다.

 

이 것을 코드로 구현하려면

  1. 문자열을 한 줄로 받아서 split() 함수로 "-" 를 기준으로 나눈다.
  2. 각 분리된 문자열의 합을 구한다.
  3. 뺄셈을 계산한다.

주의할 점이 있다면 덧셈을 기준으로 split() 함수를 사용할 때 "\\+"로 구분해야 한다는 것이다. 이걸 못찾아서 한참 헤맸다..

 

 

 


코드

 

import java.util.*;

public class Main {
   public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
      String[] part = in.nextLine().split("-");
      int answer = 0;
      for(int i = 0; i < part.length; i++){
         int sum = 0;
         String[] add = part[i].split("\\+");
         for(int j = 0; j < add.length; j++){
            sum += Integer.parseInt(add[j]);
         }
         if(i == 0) answer += sum;
         else answer -= sum;
      }
      System.out.println(answer);
      in.close();
   }
}

'알고리즘 > Class 3' 카테고리의 다른 글

백준 BOJ 1676번  (0) 2022.08.19
백준 BOJ 1620번  (0) 2022.08.18
백준 BOJ 1463번  (0) 2022.08.16
백준 BOJ 1389번  (0) 2022.08.16
백준 BOJ 1260번  (0) 2022.08.15

댓글