[BOJ 1541] 잃어버린 괄호

업데이트:

문제

  • BOJ 1541
  • 문제의 저작권은 Baekjoon Online Judge에 있습니다.

접근방식

그리디라기 보다는 문자열함수를 잘 적용할 수 있는지 묻는 문제인것 같다.
split()함수를 사용하면 된다.
예를 들어, 55+50-40+30-10의 최소값을 구하기 위해서는 합을 먼저 구하고, 그 결과값을 모조리 빼주면 된다.
즉, 55+50-40+30-10로 묶어서 계산해주면 된다.
구현한 순서는 다음과 같다.

  1. 문자열을 입력 받아서 ‘-‘를 구분자로 문자열 배열str을 만든다.
  2. 만들어진 배열을 for문으로 돌면서 +를 구분자로 새로운 문자열 배열addNums을 만든다.
  • 특수문자를 구분자로 사용하여 토큰화해주기 위해선 앞에 ‘\‘을 붙여주도록 하자.
    => split("\\+")
  1. 처음 나오는 숫자는 무조건 더해줘야 하므로 i==0일 때, Ans에 더해주고, 이외의 경우에는 Ans에서 빼준다.
import java.util.Scanner;

//잃어버린 괄호
public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String s = sc.next();

		String[] str = s.split("-");
		int Ans = 0;
		//각 숫자 더하기
		for(int i=0; i<str.length; i++) {
			String ss = str[i];
			int sum = 0;

			String[] addNums = ss.split("\\+");
			for(int j=0; j<addNums.length; j++) sum += Integer.parseInt(addNums[j]);


			if(i==0) Ans = sum;
			else Ans-=sum;
		}
		System.out.println(Ans);
	}
}

태그:

카테고리:

업데이트: