Algorithm/Algorithm Problem

백준 1541번: 잃어버린 괄호 (Python/Java)

주유소짜글이 2022. 1. 24. 23:34

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

 

 

 

접근


괄호를 묶는다는 의미만 알면 쉽게 풀 수 있는 문제다. 다들 알다시피 수학에서 괄호는 '먼저 계산한다'는 뜻이다. 그렇다면 덧셈이 있는 곳에 괄호를 쳐 숫자들을 더해준다면 나중에 뺄 때는 숫자 한 개를 뺄 때보다 훨씬 더 큰 수를 뺄 수 있게 된다. 즉, 가장 작은 수를 만들 수 있다.

 

구현 또한 간단하다. '-'를 기준으로 나눠준다. 그리고 그 나눠진 문자열을 다시 '+'를 기준으로 나눠준다. '+'를 기준으로 나눠서 나온 숫자들을 다 더한다. 나눠준 모든 문자열의 숫자들을 더해준다. 이제 이렇게 나온 숫자 중 가장 첫 번째 나온 숫자에 나머지 숫자를 모두 빼주면 해당 계산을 구현할 수 있게 된다.

 

 

 

풀이


Python

testcase = (input()).split('-')

board = []
for i in range(len(testcase)):

    subSum = 0
    for j in range(len(testcase[i].split('+'))):
        subSum += int(testcase[i].split('+')[j])
    
    board.append(subSum)

result = board[0]
for i in range(1, len(board)):
    result -= board[i]

print(result)

 

Java

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        
        Scanner scan = new Scanner(System.in);
        String[] testcase = (scan.nextLine()).split("-");

        int result = 0;
        for(int i = 0 ; i < testcase.length ; i++){

            int subSum = 0;
            for(int j = 0 ; j < (testcase[i].split("\\+")).length ; j++){
                subSum += Integer.parseInt(testcase[i].split("\\+")[j]);
            }

            if(i == 0){
                result = subSum;
            }else {
                result -= subSum;
            }

        }

        System.out.println(result);

    }

}