잃어버린 괄호 (백준 1541번)

박영준·2023년 5월 26일
0

코딩테스트

목록 보기
154/300

메모

/*
1. 식 만들기 : 양수, +, -, 괄호
  - 조건 1 : ‘0’~‘9’, ‘+’, ‘-’만으로 이루어짐
  - 조건 2 : 가장 처음과 마지막 문자는 숫자
  - 조건 3 : 연속해서 두 개 이상의 연산자 X
  - 조건 4 : 연속되는 숫자의 자리 < 5자리
  - 조건 5 : 수는 0으로 시작 가능
  - 조건 6 : 식의 길이 <= 50

2. 식에서 괄호 지우기 : 양수, +, -

3. 다시 괄호 넣어서 최솟값 만들기
*/

해결법

  • 일반적인 최솟값?

    • + 의 경우, 낮은 숫자 多수록 -> +0 +1
    • - 의 경우, 높은 숫자 多수록 -> -9 -8
  • 괄호( ) 가 있는 최솟값?

    • 괄호로 +, - 의 우선순위를 정할 수 있다.
      • +로 모든 값을 더해서 큰 값을 만들고
      • 큰 값들에 -를 붙인다
  • 과정

    • split()으로, - 를 기준으로 문자열을 분리
    • 분리된 문자열들 각각에 포함 된 정수 값들을 모두 +
    • 각각 더해진 값들을 -

방법 1

import java.util.Scanner;
 
public class Main {
	public static void main(String[] args) {
 
		Scanner in = new Scanner(System.in);
 
		int sum = Integer.MAX_VALUE;	// 변수 sum 을 Integer.MAX_VALUE 로 초기화해둔다 
        
		String[] subtraction = in.nextLine().split("-");		// -를 기준으로 각 정수를 분리하고, 배열 subtraction 에 담는다
		
		for (int i = 0; i < subtraction.length; i++) {
			int temp = 0;
			String[] addition = subtraction[i].split("\\+");		// 배열 subtraction 를 +를 기준으로 분리하고, 배열 addition 에 담는다
			
			for (int j = 0; j < addition.length; j++) {		// 모든 배열을 더한다.
				temp += Integer.parseInt(addition[j]);
			}
			
			// 첫 번째 값이 temp 에 담겨서, sum 의 첫 번째 수가 됨
			if (sum == Integer.MAX_VALUE) {
				sum = temp;
			} else {
				sum -= temp;
			}
		}
        
		System.out.println(sum);
	}
}
  • 첫 번째 수

    • 다른 값들을 첫 번째 수에서 빼기 위해서는(총합이 음수가 되지 않기 위해서는) +가 붙은 값이여야 한다.
    • 순서
      • int sum = Integer.MAX_VALUE; 으로 sum의 초기값을 설정해둔다.
      • for문으로 실행되는 temp += Integer.parseInt(addition[j]) 중 1 loop 에서 첫 번째 값이 temp 에 담기고
      • if (sum == Integer.MAX_VALUE) 조건으로 sum 이 처음에 선언해둔 초기값을 가지고 있는 경우(즉, 첫 번째 값이 temp 에 담긴 경우)에만 sum = temp; 이라는 조건을 준다
      • 이후의 값들은 sum 의 초기값이 된 temp 에서 계속 빼준다.
  • \\+

    • 이스케이프 처리
    • +, [, ], (, ) 등의 특수문자를 사용할 때는 앞에 \\를 붙여주어야 함
    • split의 경우 정규식(regex)을 받기 때문에 "+"을 하면 regex.PatternSyntaxException을 뱉기 때문
  • -, + 를 split 으로 모두 제거하고
    for문과 if문으로 직접 -, + 해줌


참고: 자바 정규식(Regular Expression) 사용법 💯 정리
참고: [백준] 1541번 : 잃어버린 괄호 - JAVA [자바]


잃어버린 괄호 (백준 1541번)

profile
개발자로 거듭나기!

0개의 댓글