자바로 백준 1541 풀기

hong030·2023년 7월 31일
0
  • 실버 2단계 문제

풀이)
식에 괄호를 적절히 쳐서 최솟값을 도출하는 식으로 만들려 한다.
이 때의 최솟값을 구해야 한다.
식에는 양의 정수와 +, -기호만 있고, 숫자는 10만 미만이다.
식의 길이는 50 이하이므로 식의 최댓값은 100만 미만이라 int로 표현 가능하다.

최솟값을 만들려면 덧셈 파트에 그냥 괄호 치면 된다.
예를 들어
1. 55-50+40 -> 55-(50+40)
2. 10+20+30+40 -> (((10+20)+30)+40)
3. 30-70+20-60 -> 30-(70+20)-60
4. 100-40+50+74-30+29-45+43+11 -> 100-((40+50)+74)-(30+29)-((45+43)+11)

4번으로 예시를 들면
"-"로 split 해서 100, 40+50+74, 30+29, 45+43+11로 만들기
각 str를 +로 split해서 다 계산한다음 sum 계산하기.

중요한 것!! split 할 때 +는 특수 기호라서, str.split("\+") 로 해야 한다.

내 코드)

// 백준 온라인 저지 1541번

import java.io.*;

public class Main{
	static int mySum(String mystr) {
		String tempStr[] = mystr.split("\\+");
		int tempNum[] = new int[tempStr.length];
		for(int i=0;i<tempStr.length;i++) {
			tempNum[i] = Integer.parseInt(tempStr[i]);
		}
		int sum = tempNum[0];
		if(tempNum.length==1) {
			return tempNum[0];
		}else {
			for(int i=1;i<tempNum.length;i++) {
				sum += tempNum[i];
			}
			return sum;	
		}		
	}
	
	public static void main(String[]args) throws IOException{
		
		// 입력. 
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		String str = bf.readLine();
		String[]strArr = str.split("-");
	
		// strArr 배열 내 숫자들을 정수로 바꾸기.
		int []numArr = new int[strArr.length];
		for(int i=0;i<strArr.length;i++) {
			numArr[i] = mySum(strArr[i]);
		}		
		
		// 계산.
		int sum = numArr[0];
		for(int i=1;i<strArr.length;i++) {
			sum -= numArr[i];
		}
		System.out.println(sum);
	}
}
profile
자바 주력, 프론트 공부 중인 초보 개발자. / https://github.com/hongjaewonP

0개의 댓글